Browse Source

active posters ranking

Rafał Pitoń 9 years ago
parent
commit
3a43fa5c92

+ 0 - 12
docs/developers/settings.rst

@@ -294,18 +294,6 @@ MISAGO_NOTIFICATIONS_MAX_AGE
 Max age, in days, of notifications stored in database. Notifications older than this will be delted.
 
 
-MISAGO_ONLINE_LIST_SIZE
------------------------
-
-Controls number of users displayed on online list.
-
-
-MISAGO_ONLINE_LIST_CACHE
-------------------------
-
-For how long should online list be cached, in seconds.
-
-
 MISAGO_POSTING_MIDDLEWARES
 --------------------------
 

+ 1 - 1
frontend/src/components/options/change-username.js

@@ -289,7 +289,7 @@ export class UsernameHistory extends React.Component {
             <div className="username-change-date">
               <span className="ui-preview-text" style={{width: random.int(50, 100) + "px"}}>&nbsp;</span>
             </div>
-          </li>
+          </li>;
         })}
       </ul>
     </div>;

+ 3 - 3
frontend/src/components/user-status.js

@@ -48,7 +48,7 @@ export class StatusIcon extends React.Component {
 
   render() {
     /* jshint ignore:start */
-    return <span className="status-icon">
+    return <span className="material-icon status-icon">
       {this.getIcon()}
     </span>;
     /* jshint ignore:end */
@@ -80,7 +80,7 @@ export class StatusLabel extends React.Component {
     } else if (this.props.status.is_offline_hidden) {
       return interpolate(gettext("%(username)s was last seen %(last_click)s (hidden)"), {
         username: this.props.user.username,
-        last_click: this.props.state.lastClick.fromNow()
+        last_click: this.props.status.last_click.fromNow()
       }, true);
     } else if (this.props.status.is_online) {
       return interpolate(gettext("%(username)s is online"), {
@@ -89,7 +89,7 @@ export class StatusLabel extends React.Component {
     } else if (this.props.status.is_offline) {
       return interpolate(gettext("%(username)s was last seen %(last_click)s"), {
         username: this.props.user.username,
-        last_click: this.props.state.lastClick.fromNow()
+        last_click: this.props.status.last_click.fromNow()
       }, true);
     }
   }

+ 93 - 1
frontend/src/components/users/active-posters.js

@@ -4,8 +4,10 @@ import Avatar from 'misago/components/avatar'; // jshint ignore:line
 import Status, { StatusIcon, StatusLabel } from 'misago/components/user-status'; // jshint ignore:line
 import misago from 'misago/index';
 import { dehydrate } from 'misago/reducers/users';
+import ajax from 'misago/services/ajax';
 import title from 'misago/services/page-title';
 import store from 'misago/services/store';
+import * as random from 'misago/utils/random'; // jshint ignore:line
 
 export class ActivePoster extends React.Component {
   getClassName() {
@@ -151,7 +153,69 @@ export class ActivePostersLoading extends React.Component {
     /* jshint ignore:start */
     return <div className="active-posters-list">
       <div className="container">
-        This is UI preview!
+        <p className="lead ui-preview-paragraph">
+          {random.range(3, 4).map((i) => {
+            return <span key={i} className="ui-preview-text" style={{width: random.int(50, 120) + "px"}}>&nbsp;</span>
+          })}
+        </p>
+
+        <div className="active-posters ui-preview">
+          <ul className="list-group">
+            {random.range(5, 10).map((i, counter) => {
+              return <li key={i} className="list-group-item">
+                <div className="rank-user-avatar">
+                  <span>
+                    <Avatar size="50" />
+                  </span>
+                </div>
+
+                <div className="rank-user">
+                  <div className="user-name">
+                    <span className="item-title">
+                      <span className="ui-preview-text" style={{width: random.int(30, 80) + "px"}}>&nbsp;</span>
+                    </span>
+                  </div>
+
+                  <span className="user-status">
+                    <span className="status-icon ui-preview">
+                      &nbsp;
+                    </span>
+                    <span className="status-label ui-preview hidden-xs hidden-sm">
+                      &nbsp;
+                    </span>
+                  </span>
+                  <span className="rank-name">
+                    <span className="ui-preview-text" style={{width: random.int(30, 50) + "px"}}>&nbsp;</span>
+                  </span>
+                  <span className="user-title hidden-xs hidden-sm">
+                    <span className="ui-preview-text" style={{width: random.int(30, 50) + "px"}}>&nbsp;</span>
+                  </span>
+                </div>
+
+                <div className="rank-position">
+                  <div className="stat-value">
+                    <span className="ui-preview-text" style={{width: "30px"}}>&nbsp;</span>
+                  </div>
+                  <div className="text-muted">{gettext("Rank")}</div>
+                </div>
+
+                <div className="rank-posts-counted">
+                  <div className="stat-value">
+                    <span className="ui-preview-text" style={{width: "30px"}}>&nbsp;</span>
+                  </div>
+                  <div className="text-muted">{gettext("Ranked posts")}</div>
+                </div>
+
+                <div className="rank-posts-total">
+                  <div className="stat-value">
+                    <span className="ui-preview-text" style={{width: "30px"}}>&nbsp;</span>
+                  </div>
+                  <div className="text-muted">{gettext("Total posts")}</div>
+                </div>
+              </li>;
+            })}
+          </ul>
+        </div>
       </div>
     </div>;
     /* jshint ignore:end */
@@ -187,6 +251,9 @@ export default class extends React.Component {
     } else {
       this.initWithoutPreloadedData();
     }
+
+    this.poolId = null;
+    this.startPooling();
   }
 
   initWithPreloadedData(data) {
@@ -206,6 +273,25 @@ export default class extends React.Component {
     };
   }
 
+  startPooling() {
+    let poolServer = () => {
+      ajax.get(misago.get('USERS_API'), {list: 'active'}).then((data) => {
+        this.setState({
+          isLoaded: true,
+
+          trackedPeriod: data.tracked_period,
+          count: data.count
+        });
+
+        store.dispatch(dehydrate(data.results));
+
+        this.poolId = window.setTimeout(poolServer, 90 * 1000);
+      });
+    };
+
+    poolServer();
+  }
+
   componentDidMount() {
     title.set({
       title: this.props.route.extra.name,
@@ -213,6 +299,12 @@ export default class extends React.Component {
     });
   }
 
+  componentWillUnmount() {
+    if (this.poolId) {
+      window.clearTimeout(this.poolId);
+    }
+  }
+
   render() {
     if (this.state.isLoaded) {
       if (this.state.count > 0) {

+ 1 - 1
frontend/src/components/users/root.js

@@ -51,7 +51,7 @@ export default class extends React.Component {
       <div className="page-header tabbed">
         <div className="container">
 
-          <h1>{gettext("Users")}</h1>
+          <h1 className="pull-left">{gettext("Users")}</h1>
 
           <button className="btn btn-default btn-icon btn-dropdown-toggle hidden-md hidden-lg"
                   type="button"

+ 11 - 1
frontend/src/reducers/users.js

@@ -1,3 +1,5 @@
+import moment from 'moment';
+
 export const DEHYDRATE_RESULT = 'DEHYDRATE_RESULT';
 export const UPDATE_AVATAR = 'UPDATE_AVATAR';
 export const UPDATE_USERNAME = 'UPDATE_USERNAME';
@@ -30,8 +32,16 @@ export default function user(state=[], action=null) {
   switch (action.type) {
     case DEHYDRATE_RESULT:
       return action.items.map(function(item) {
-        return Object.assign({}, item, {
+        let status = item.status || null;
+        if (status) {
+          status = Object.assign({}, status, {
+            last_click: status.last_click ? moment(status.last_click) : null,
+            banned_until: status.banned_until ? moment(status.banned_until) : null
+          });
+        }
 
+        return Object.assign({}, item, {
+          status
         });
       });
 

+ 1 - 1
frontend/src/utils/random.js

@@ -1,5 +1,5 @@
 export function int(min, max) {
-  return Math.floor((Math.random() * (max + 1))) + min;
+  return Math.floor((Math.random() * (max - min + 1))) + min;
 }
 
 export function range(min, max) {

+ 10 - 8
frontend/style/misago/page-header.less

@@ -35,14 +35,16 @@
 }
 
 
-// Tabbed
-.page-header.tabbed {
-  padding-bottom: 0px;
-
-  .page-tabs {
-    .nav>li {
-      &>a {
-        border-radius: 0px;
+// Tabbed on full display
+@media screen and (min-width: @screen-md-min) {
+  .page-header.tabbed {
+    padding-bottom: 0px;
+
+    .page-tabs {
+      .nav>li {
+        &>a {
+          border-radius: 0px;
+        }
       }
     }
   }

+ 10 - 0
frontend/style/misago/ui-preview.less

@@ -55,6 +55,16 @@
 }
 
 
+.ui-preview-paragraph {
+  .ui-preview-text {
+    margin-right: 6px;
+
+    &:last-child {
+      margin-right: 0px;
+    }
+  }
+}
+
 // List
 .ui-preview .list-group {
   padding: 1px;

+ 16 - 0
frontend/style/misago/user-status.less

@@ -3,6 +3,22 @@
 // --------------------------------------------------
 
 
+// Colors
+.user-status {
+  &.user-banned .status-icon {
+    color: @user-status-banned;
+  }
+
+  &.user-online .status-icon {
+    color: @user-status-online;
+  }
+
+  &.user-offline .status-icon {
+    color: @user-status-offline;
+  }
+}
+
+
 // UI Preview
 .user-status {
   &>.status-icon.ui-preview {

+ 51 - 3
frontend/style/misago/users-lists.less

@@ -19,6 +19,8 @@
       width: 18px;
       height: 18px;
 
+      margin-right: 2px;
+
       font-size: 18px;
       line-height: 18px;
     }
@@ -49,7 +51,12 @@
 
         .status-icon {
           position: relative;
-          top: 1px;
+          top: -1px;
+
+          &.ui-preview {
+            position: relative;
+            top: 1px;
+          }
         }
       }
     }
@@ -69,11 +76,44 @@
       }
     }
   }
+
+  .active-posters.ui-preview {
+    .rank-user .rank-name {
+      position: relative;
+      bottom: 1px;
+
+      .ui-preview-text {
+        height: @font-size-small;
+      }
+    }
+
+    .rank-position, .rank-posts-total, .rank-posts-counted {
+      .stat-value {
+        position: relative;
+        bottom: 1px;
+
+        .ui-preview-text {
+          height: @font-size-small;
+        }
+      }
+    }
+  }
 }
 
 
 // Full displays
 @media screen and (min-width: @screen-md-min) {
+  .active-posters.ui-preview {
+    .rank-user {
+      .user-status {
+        .status-icon {
+          position: relative;
+          top: 2px;
+        }
+      }
+    }
+  }
+
   .active-posters {
     li>* {
       float: left;
@@ -96,11 +136,15 @@
       }
 
       .user-status {
-        margin-left: @line-height-computed * .8;
+        margin-right: @line-height-computed * .6;
 
         .status-icon {
           position: relative;
-          top: 2px;
+          top: -1px;
+
+          &.ui-preview {
+            top: 2px;
+          }
         }
 
         .status-label {
@@ -108,6 +152,10 @@
           line-height: @font-size-small;
         }
       }
+
+      .rank-name {
+        margin-right: @line-height-computed * .6;
+      }
     }
 
     .rank-position {

+ 7 - 0
frontend/style/misago/variables.less

@@ -38,6 +38,13 @@
 @auth-changed-color:      @gray-darker;
 
 
+//== User status colors
+//
+@user-status-banned:      @brand-danger;
+@user-status-online:      @brand-success;
+@user-status-offline:     @gray-lighter;
+
+
 //-- Z-index master list
 //
 // Warning: Avoid customizing these values. They're used for a bird's eye view

+ 0 - 7
misago/conf/defaults.py

@@ -315,13 +315,6 @@ MISAGO_RANKING_LENGTH = 30
 MISAGO_RANKING_SIZE = 50
 
 
-# Controls max number of items displayed on online list
-MISAGO_ONLINE_LIST_SIZE = 50
-
-# For how long should online list be cached (in seconds)
-MISAGO_ONLINE_LIST_CACHE = 40
-
-
 # Controls number of users displayed on single page
 MISAGO_USERS_PER_PAGE = 12
 

+ 1 - 5915
misago/static/misago/css/misago.css

@@ -1,5915 +1 @@
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
-html {
-  font-family: sans-serif;
-  -ms-text-size-adjust: 100%;
-  -webkit-text-size-adjust: 100%;
-}
-body {
-  margin: 0;
-}
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
-  display: block;
-}
-audio,
-canvas,
-progress,
-video {
-  display: inline-block;
-  vertical-align: baseline;
-}
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-[hidden],
-template {
-  display: none;
-}
-a {
-  background-color: transparent;
-}
-a:active,
-a:hover {
-  outline: 0;
-}
-abbr[title] {
-  border-bottom: 1px dotted;
-}
-b,
-strong {
-  font-weight: bold;
-}
-dfn {
-  font-style: italic;
-}
-h1 {
-  font-size: 2em;
-  margin: 0.67em 0;
-}
-mark {
-  background: #ff0;
-  color: #000;
-}
-small {
-  font-size: 80%;
-}
-sub,
-sup {
-  font-size: 75%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-sup {
-  top: -0.5em;
-}
-sub {
-  bottom: -0.25em;
-}
-img {
-  border: 0;
-}
-svg:not(:root) {
-  overflow: hidden;
-}
-figure {
-  margin: 1em 40px;
-}
-hr {
-  box-sizing: content-box;
-  height: 0;
-}
-pre {
-  overflow: auto;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: monospace, monospace;
-  font-size: 1em;
-}
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit;
-  font: inherit;
-  margin: 0;
-}
-button {
-  overflow: visible;
-}
-button,
-select {
-  text-transform: none;
-}
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  -webkit-appearance: button;
-  cursor: pointer;
-}
-button[disabled],
-html input[disabled] {
-  cursor: default;
-}
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0;
-}
-input {
-  line-height: normal;
-}
-input[type="checkbox"],
-input[type="radio"] {
-  box-sizing: border-box;
-  padding: 0;
-}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-appearance: textfield;
-  box-sizing: content-box;
-}
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  -webkit-appearance: none;
-}
-fieldset {
-  border: 1px solid #c0c0c0;
-  margin: 0 2px;
-  padding: 0.35em 0.625em 0.75em;
-}
-legend {
-  border: 0;
-  padding: 0;
-}
-textarea {
-  overflow: auto;
-}
-optgroup {
-  font-weight: bold;
-}
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-td,
-th {
-  padding: 0;
-}
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-@media print {
-  *,
-  *:before,
-  *:after {
-    background: transparent !important;
-    color: #000 !important;
-    box-shadow: none !important;
-    text-shadow: none !important;
-  }
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-  a[href]:after {
-    content: " (" attr(href) ")";
-  }
-  abbr[title]:after {
-    content: " (" attr(title) ")";
-  }
-  a[href^="#"]:after,
-  a[href^="javascript:"]:after {
-    content: "";
-  }
-  pre,
-  blockquote {
-    border: 1px solid #999;
-    page-break-inside: avoid;
-  }
-  thead {
-    display: table-header-group;
-  }
-  tr,
-  img {
-    page-break-inside: avoid;
-  }
-  img {
-    max-width: 100% !important;
-  }
-  p,
-  h2,
-  h3 {
-    orphans: 3;
-    widows: 3;
-  }
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-  .navbar {
-    display: none;
-  }
-  .btn > .caret,
-  .dropup > .btn > .caret {
-    border-top-color: #000 !important;
-  }
-  .label {
-    border: 1px solid #000;
-  }
-  .table {
-    border-collapse: collapse !important;
-  }
-  .table td,
-  .table th {
-    background-color: #fff !important;
-  }
-  .table-bordered th,
-  .table-bordered td {
-    border: 1px solid #ddd !important;
-  }
-}
-* {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-*:before,
-*:after {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-html {
-  font-size: 10px;
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-body {
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #333333;
-  background-color: #fff;
-}
-input,
-button,
-select,
-textarea {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
-}
-a {
-  color: #337ab7;
-  text-decoration: none;
-}
-a:hover,
-a:focus {
-  color: #23527c;
-  text-decoration: underline;
-}
-a:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-figure {
-  margin: 0;
-}
-img {
-  vertical-align: middle;
-}
-.img-responsive {
-  display: block;
-  max-width: 100%;
-  height: auto;
-}
-.img-rounded {
-  border-radius: 6px;
-}
-.img-thumbnail {
-  padding: 4px;
-  line-height: 1.42857143;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 4px;
-  -webkit-transition: all 0.2s ease-in-out;
-  -o-transition: all 0.2s ease-in-out;
-  transition: all 0.2s ease-in-out;
-  display: inline-block;
-  max-width: 100%;
-  height: auto;
-}
-.img-circle {
-  border-radius: 50%;
-}
-hr {
-  margin-top: 20px;
-  margin-bottom: 20px;
-  border: 0;
-  border-top: 1px solid #eeeeee;
-}
-.sr-only {
-  position: absolute;
-  width: 1px;
-  height: 1px;
-  margin: -1px;
-  padding: 0;
-  overflow: hidden;
-  clip: rect(0, 0, 0, 0);
-  border: 0;
-}
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
-  position: static;
-  width: auto;
-  height: auto;
-  margin: 0;
-  overflow: visible;
-  clip: auto;
-}
-[role="button"] {
-  cursor: pointer;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
-  font-family: inherit;
-  font-weight: 500;
-  line-height: 1.1;
-  color: inherit;
-}
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-h1 .small,
-h2 .small,
-h3 .small,
-h4 .small,
-h5 .small,
-h6 .small,
-.h1 .small,
-.h2 .small,
-.h3 .small,
-.h4 .small,
-.h5 .small,
-.h6 .small {
-  font-weight: normal;
-  line-height: 1;
-  color: #777777;
-}
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
-  margin-top: 20px;
-  margin-bottom: 10px;
-}
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
-  font-size: 65%;
-}
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
-  font-size: 75%;
-}
-h1,
-.h1 {
-  font-size: 36px;
-}
-h2,
-.h2 {
-  font-size: 30px;
-}
-h3,
-.h3 {
-  font-size: 24px;
-}
-h4,
-.h4 {
-  font-size: 18px;
-}
-h5,
-.h5 {
-  font-size: 14px;
-}
-h6,
-.h6 {
-  font-size: 12px;
-}
-p {
-  margin: 0 0 10px;
-}
-.lead {
-  margin-bottom: 20px;
-  font-size: 16px;
-  font-weight: 300;
-  line-height: 1.4;
-}
-@media (min-width: 768px) {
-  .lead {
-    font-size: 21px;
-  }
-}
-small,
-.small {
-  font-size: 85%;
-}
-mark,
-.mark {
-  background-color: #fcf8e3;
-  padding: .2em;
-}
-.text-left {
-  text-align: left;
-}
-.text-right {
-  text-align: right;
-}
-.text-center {
-  text-align: center;
-}
-.text-justify {
-  text-align: justify;
-}
-.text-nowrap {
-  white-space: nowrap;
-}
-.text-lowercase {
-  text-transform: lowercase;
-}
-.text-uppercase {
-  text-transform: uppercase;
-}
-.text-capitalize {
-  text-transform: capitalize;
-}
-.text-muted {
-  color: #777777;
-}
-.text-primary {
-  color: #337ab7;
-}
-a.text-primary:hover,
-a.text-primary:focus {
-  color: #286090;
-}
-.text-success {
-  color: #3c763d;
-}
-a.text-success:hover,
-a.text-success:focus {
-  color: #2b542c;
-}
-.text-info {
-  color: #31708f;
-}
-a.text-info:hover,
-a.text-info:focus {
-  color: #245269;
-}
-.text-warning {
-  color: #8a6d3b;
-}
-a.text-warning:hover,
-a.text-warning:focus {
-  color: #66512c;
-}
-.text-danger {
-  color: #a94442;
-}
-a.text-danger:hover,
-a.text-danger:focus {
-  color: #843534;
-}
-.bg-primary {
-  color: #fff;
-  background-color: #337ab7;
-}
-a.bg-primary:hover,
-a.bg-primary:focus {
-  background-color: #286090;
-}
-.bg-success {
-  background-color: #dff0d8;
-}
-a.bg-success:hover,
-a.bg-success:focus {
-  background-color: #c1e2b3;
-}
-.bg-info {
-  background-color: #d9edf7;
-}
-a.bg-info:hover,
-a.bg-info:focus {
-  background-color: #afd9ee;
-}
-.bg-warning {
-  background-color: #fcf8e3;
-}
-a.bg-warning:hover,
-a.bg-warning:focus {
-  background-color: #f7ecb5;
-}
-.bg-danger {
-  background-color: #f2dede;
-}
-a.bg-danger:hover,
-a.bg-danger:focus {
-  background-color: #e4b9b9;
-}
-.page-header {
-  padding-bottom: 9px;
-  margin: 40px 0 20px;
-  border-bottom: 1px solid #eeeeee;
-}
-ul,
-ol {
-  margin-top: 0;
-  margin-bottom: 10px;
-}
-ul ul,
-ol ul,
-ul ol,
-ol ol {
-  margin-bottom: 0;
-}
-.list-unstyled {
-  padding-left: 0;
-  list-style: none;
-}
-.list-inline {
-  padding-left: 0;
-  list-style: none;
-  margin-left: -5px;
-}
-.list-inline > li {
-  display: inline-block;
-  padding-left: 5px;
-  padding-right: 5px;
-}
-dl {
-  margin-top: 0;
-  margin-bottom: 20px;
-}
-dt,
-dd {
-  line-height: 1.42857143;
-}
-dt {
-  font-weight: bold;
-}
-dd {
-  margin-left: 0;
-}
-@media (min-width: 768px) {
-  .dl-horizontal dt {
-    float: left;
-    width: 160px;
-    clear: left;
-    text-align: right;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-  }
-  .dl-horizontal dd {
-    margin-left: 180px;
-  }
-}
-abbr[title],
-abbr[data-original-title] {
-  cursor: help;
-  border-bottom: 1px dotted #777777;
-}
-.initialism {
-  font-size: 90%;
-  text-transform: uppercase;
-}
-blockquote {
-  padding: 10px 20px;
-  margin: 0 0 20px;
-  font-size: 17.5px;
-  border-left: 5px solid #eeeeee;
-}
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
-  margin-bottom: 0;
-}
-blockquote footer,
-blockquote small,
-blockquote .small {
-  display: block;
-  font-size: 80%;
-  line-height: 1.42857143;
-  color: #777777;
-}
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
-  content: '\2014 \00A0';
-}
-.blockquote-reverse,
-blockquote.pull-right {
-  padding-right: 15px;
-  padding-left: 0;
-  border-right: 5px solid #eeeeee;
-  border-left: 0;
-  text-align: right;
-}
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
-  content: '';
-}
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
-  content: '\00A0 \2014';
-}
-address {
-  margin-bottom: 20px;
-  font-style: normal;
-  line-height: 1.42857143;
-}
-code,
-kbd,
-pre,
-samp {
-  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
-}
-code {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #c7254e;
-  background-color: #f9f2f4;
-  border-radius: 4px;
-}
-kbd {
-  padding: 2px 4px;
-  font-size: 90%;
-  color: #fff;
-  background-color: #333;
-  border-radius: 3px;
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
-}
-kbd kbd {
-  padding: 0;
-  font-size: 100%;
-  font-weight: bold;
-  box-shadow: none;
-}
-pre {
-  display: block;
-  padding: 9.5px;
-  margin: 0 0 10px;
-  font-size: 13px;
-  line-height: 1.42857143;
-  word-break: break-all;
-  word-wrap: break-word;
-  color: #333333;
-  background-color: #f5f5f5;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-}
-pre code {
-  padding: 0;
-  font-size: inherit;
-  color: inherit;
-  white-space: pre-wrap;
-  background-color: transparent;
-  border-radius: 0;
-}
-.pre-scrollable {
-  max-height: 340px;
-  overflow-y: scroll;
-}
-.container {
-  margin-right: auto;
-  margin-left: auto;
-  padding-left: 15px;
-  padding-right: 15px;
-}
-@media (min-width: 768px) {
-  .container {
-    width: 750px;
-  }
-}
-@media (min-width: 992px) {
-  .container {
-    width: 970px;
-  }
-}
-@media (min-width: 1200px) {
-  .container {
-    width: 1170px;
-  }
-}
-.container-fluid {
-  margin-right: auto;
-  margin-left: auto;
-  padding-left: 15px;
-  padding-right: 15px;
-}
-.row {
-  margin-left: -15px;
-  margin-right: -15px;
-}
-.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
-  position: relative;
-  min-height: 1px;
-  padding-left: 15px;
-  padding-right: 15px;
-}
-.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
-  float: left;
-}
-.col-xs-12 {
-  width: 100%;
-}
-.col-xs-11 {
-  width: 91.66666667%;
-}
-.col-xs-10 {
-  width: 83.33333333%;
-}
-.col-xs-9 {
-  width: 75%;
-}
-.col-xs-8 {
-  width: 66.66666667%;
-}
-.col-xs-7 {
-  width: 58.33333333%;
-}
-.col-xs-6 {
-  width: 50%;
-}
-.col-xs-5 {
-  width: 41.66666667%;
-}
-.col-xs-4 {
-  width: 33.33333333%;
-}
-.col-xs-3 {
-  width: 25%;
-}
-.col-xs-2 {
-  width: 16.66666667%;
-}
-.col-xs-1 {
-  width: 8.33333333%;
-}
-.col-xs-pull-12 {
-  right: 100%;
-}
-.col-xs-pull-11 {
-  right: 91.66666667%;
-}
-.col-xs-pull-10 {
-  right: 83.33333333%;
-}
-.col-xs-pull-9 {
-  right: 75%;
-}
-.col-xs-pull-8 {
-  right: 66.66666667%;
-}
-.col-xs-pull-7 {
-  right: 58.33333333%;
-}
-.col-xs-pull-6 {
-  right: 50%;
-}
-.col-xs-pull-5 {
-  right: 41.66666667%;
-}
-.col-xs-pull-4 {
-  right: 33.33333333%;
-}
-.col-xs-pull-3 {
-  right: 25%;
-}
-.col-xs-pull-2 {
-  right: 16.66666667%;
-}
-.col-xs-pull-1 {
-  right: 8.33333333%;
-}
-.col-xs-pull-0 {
-  right: auto;
-}
-.col-xs-push-12 {
-  left: 100%;
-}
-.col-xs-push-11 {
-  left: 91.66666667%;
-}
-.col-xs-push-10 {
-  left: 83.33333333%;
-}
-.col-xs-push-9 {
-  left: 75%;
-}
-.col-xs-push-8 {
-  left: 66.66666667%;
-}
-.col-xs-push-7 {
-  left: 58.33333333%;
-}
-.col-xs-push-6 {
-  left: 50%;
-}
-.col-xs-push-5 {
-  left: 41.66666667%;
-}
-.col-xs-push-4 {
-  left: 33.33333333%;
-}
-.col-xs-push-3 {
-  left: 25%;
-}
-.col-xs-push-2 {
-  left: 16.66666667%;
-}
-.col-xs-push-1 {
-  left: 8.33333333%;
-}
-.col-xs-push-0 {
-  left: auto;
-}
-.col-xs-offset-12 {
-  margin-left: 100%;
-}
-.col-xs-offset-11 {
-  margin-left: 91.66666667%;
-}
-.col-xs-offset-10 {
-  margin-left: 83.33333333%;
-}
-.col-xs-offset-9 {
-  margin-left: 75%;
-}
-.col-xs-offset-8 {
-  margin-left: 66.66666667%;
-}
-.col-xs-offset-7 {
-  margin-left: 58.33333333%;
-}
-.col-xs-offset-6 {
-  margin-left: 50%;
-}
-.col-xs-offset-5 {
-  margin-left: 41.66666667%;
-}
-.col-xs-offset-4 {
-  margin-left: 33.33333333%;
-}
-.col-xs-offset-3 {
-  margin-left: 25%;
-}
-.col-xs-offset-2 {
-  margin-left: 16.66666667%;
-}
-.col-xs-offset-1 {
-  margin-left: 8.33333333%;
-}
-.col-xs-offset-0 {
-  margin-left: 0%;
-}
-@media (min-width: 768px) {
-  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
-    float: left;
-  }
-  .col-sm-12 {
-    width: 100%;
-  }
-  .col-sm-11 {
-    width: 91.66666667%;
-  }
-  .col-sm-10 {
-    width: 83.33333333%;
-  }
-  .col-sm-9 {
-    width: 75%;
-  }
-  .col-sm-8 {
-    width: 66.66666667%;
-  }
-  .col-sm-7 {
-    width: 58.33333333%;
-  }
-  .col-sm-6 {
-    width: 50%;
-  }
-  .col-sm-5 {
-    width: 41.66666667%;
-  }
-  .col-sm-4 {
-    width: 33.33333333%;
-  }
-  .col-sm-3 {
-    width: 25%;
-  }
-  .col-sm-2 {
-    width: 16.66666667%;
-  }
-  .col-sm-1 {
-    width: 8.33333333%;
-  }
-  .col-sm-pull-12 {
-    right: 100%;
-  }
-  .col-sm-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-sm-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-sm-pull-9 {
-    right: 75%;
-  }
-  .col-sm-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-sm-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-sm-pull-6 {
-    right: 50%;
-  }
-  .col-sm-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-sm-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-sm-pull-3 {
-    right: 25%;
-  }
-  .col-sm-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-sm-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-sm-pull-0 {
-    right: auto;
-  }
-  .col-sm-push-12 {
-    left: 100%;
-  }
-  .col-sm-push-11 {
-    left: 91.66666667%;
-  }
-  .col-sm-push-10 {
-    left: 83.33333333%;
-  }
-  .col-sm-push-9 {
-    left: 75%;
-  }
-  .col-sm-push-8 {
-    left: 66.66666667%;
-  }
-  .col-sm-push-7 {
-    left: 58.33333333%;
-  }
-  .col-sm-push-6 {
-    left: 50%;
-  }
-  .col-sm-push-5 {
-    left: 41.66666667%;
-  }
-  .col-sm-push-4 {
-    left: 33.33333333%;
-  }
-  .col-sm-push-3 {
-    left: 25%;
-  }
-  .col-sm-push-2 {
-    left: 16.66666667%;
-  }
-  .col-sm-push-1 {
-    left: 8.33333333%;
-  }
-  .col-sm-push-0 {
-    left: auto;
-  }
-  .col-sm-offset-12 {
-    margin-left: 100%;
-  }
-  .col-sm-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-sm-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-sm-offset-9 {
-    margin-left: 75%;
-  }
-  .col-sm-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-sm-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-sm-offset-6 {
-    margin-left: 50%;
-  }
-  .col-sm-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-sm-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-sm-offset-3 {
-    margin-left: 25%;
-  }
-  .col-sm-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-sm-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-sm-offset-0 {
-    margin-left: 0%;
-  }
-}
-@media (min-width: 992px) {
-  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
-    float: left;
-  }
-  .col-md-12 {
-    width: 100%;
-  }
-  .col-md-11 {
-    width: 91.66666667%;
-  }
-  .col-md-10 {
-    width: 83.33333333%;
-  }
-  .col-md-9 {
-    width: 75%;
-  }
-  .col-md-8 {
-    width: 66.66666667%;
-  }
-  .col-md-7 {
-    width: 58.33333333%;
-  }
-  .col-md-6 {
-    width: 50%;
-  }
-  .col-md-5 {
-    width: 41.66666667%;
-  }
-  .col-md-4 {
-    width: 33.33333333%;
-  }
-  .col-md-3 {
-    width: 25%;
-  }
-  .col-md-2 {
-    width: 16.66666667%;
-  }
-  .col-md-1 {
-    width: 8.33333333%;
-  }
-  .col-md-pull-12 {
-    right: 100%;
-  }
-  .col-md-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-md-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-md-pull-9 {
-    right: 75%;
-  }
-  .col-md-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-md-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-md-pull-6 {
-    right: 50%;
-  }
-  .col-md-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-md-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-md-pull-3 {
-    right: 25%;
-  }
-  .col-md-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-md-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-md-pull-0 {
-    right: auto;
-  }
-  .col-md-push-12 {
-    left: 100%;
-  }
-  .col-md-push-11 {
-    left: 91.66666667%;
-  }
-  .col-md-push-10 {
-    left: 83.33333333%;
-  }
-  .col-md-push-9 {
-    left: 75%;
-  }
-  .col-md-push-8 {
-    left: 66.66666667%;
-  }
-  .col-md-push-7 {
-    left: 58.33333333%;
-  }
-  .col-md-push-6 {
-    left: 50%;
-  }
-  .col-md-push-5 {
-    left: 41.66666667%;
-  }
-  .col-md-push-4 {
-    left: 33.33333333%;
-  }
-  .col-md-push-3 {
-    left: 25%;
-  }
-  .col-md-push-2 {
-    left: 16.66666667%;
-  }
-  .col-md-push-1 {
-    left: 8.33333333%;
-  }
-  .col-md-push-0 {
-    left: auto;
-  }
-  .col-md-offset-12 {
-    margin-left: 100%;
-  }
-  .col-md-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-md-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-md-offset-9 {
-    margin-left: 75%;
-  }
-  .col-md-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-md-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-md-offset-6 {
-    margin-left: 50%;
-  }
-  .col-md-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-md-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-md-offset-3 {
-    margin-left: 25%;
-  }
-  .col-md-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-md-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-md-offset-0 {
-    margin-left: 0%;
-  }
-}
-@media (min-width: 1200px) {
-  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
-    float: left;
-  }
-  .col-lg-12 {
-    width: 100%;
-  }
-  .col-lg-11 {
-    width: 91.66666667%;
-  }
-  .col-lg-10 {
-    width: 83.33333333%;
-  }
-  .col-lg-9 {
-    width: 75%;
-  }
-  .col-lg-8 {
-    width: 66.66666667%;
-  }
-  .col-lg-7 {
-    width: 58.33333333%;
-  }
-  .col-lg-6 {
-    width: 50%;
-  }
-  .col-lg-5 {
-    width: 41.66666667%;
-  }
-  .col-lg-4 {
-    width: 33.33333333%;
-  }
-  .col-lg-3 {
-    width: 25%;
-  }
-  .col-lg-2 {
-    width: 16.66666667%;
-  }
-  .col-lg-1 {
-    width: 8.33333333%;
-  }
-  .col-lg-pull-12 {
-    right: 100%;
-  }
-  .col-lg-pull-11 {
-    right: 91.66666667%;
-  }
-  .col-lg-pull-10 {
-    right: 83.33333333%;
-  }
-  .col-lg-pull-9 {
-    right: 75%;
-  }
-  .col-lg-pull-8 {
-    right: 66.66666667%;
-  }
-  .col-lg-pull-7 {
-    right: 58.33333333%;
-  }
-  .col-lg-pull-6 {
-    right: 50%;
-  }
-  .col-lg-pull-5 {
-    right: 41.66666667%;
-  }
-  .col-lg-pull-4 {
-    right: 33.33333333%;
-  }
-  .col-lg-pull-3 {
-    right: 25%;
-  }
-  .col-lg-pull-2 {
-    right: 16.66666667%;
-  }
-  .col-lg-pull-1 {
-    right: 8.33333333%;
-  }
-  .col-lg-pull-0 {
-    right: auto;
-  }
-  .col-lg-push-12 {
-    left: 100%;
-  }
-  .col-lg-push-11 {
-    left: 91.66666667%;
-  }
-  .col-lg-push-10 {
-    left: 83.33333333%;
-  }
-  .col-lg-push-9 {
-    left: 75%;
-  }
-  .col-lg-push-8 {
-    left: 66.66666667%;
-  }
-  .col-lg-push-7 {
-    left: 58.33333333%;
-  }
-  .col-lg-push-6 {
-    left: 50%;
-  }
-  .col-lg-push-5 {
-    left: 41.66666667%;
-  }
-  .col-lg-push-4 {
-    left: 33.33333333%;
-  }
-  .col-lg-push-3 {
-    left: 25%;
-  }
-  .col-lg-push-2 {
-    left: 16.66666667%;
-  }
-  .col-lg-push-1 {
-    left: 8.33333333%;
-  }
-  .col-lg-push-0 {
-    left: auto;
-  }
-  .col-lg-offset-12 {
-    margin-left: 100%;
-  }
-  .col-lg-offset-11 {
-    margin-left: 91.66666667%;
-  }
-  .col-lg-offset-10 {
-    margin-left: 83.33333333%;
-  }
-  .col-lg-offset-9 {
-    margin-left: 75%;
-  }
-  .col-lg-offset-8 {
-    margin-left: 66.66666667%;
-  }
-  .col-lg-offset-7 {
-    margin-left: 58.33333333%;
-  }
-  .col-lg-offset-6 {
-    margin-left: 50%;
-  }
-  .col-lg-offset-5 {
-    margin-left: 41.66666667%;
-  }
-  .col-lg-offset-4 {
-    margin-left: 33.33333333%;
-  }
-  .col-lg-offset-3 {
-    margin-left: 25%;
-  }
-  .col-lg-offset-2 {
-    margin-left: 16.66666667%;
-  }
-  .col-lg-offset-1 {
-    margin-left: 8.33333333%;
-  }
-  .col-lg-offset-0 {
-    margin-left: 0%;
-  }
-}
-table {
-  background-color: transparent;
-}
-caption {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  color: #777777;
-  text-align: left;
-}
-th {
-  text-align: left;
-}
-.table {
-  width: 100%;
-  max-width: 100%;
-  margin-bottom: 20px;
-}
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
-  padding: 8px;
-  line-height: 1.42857143;
-  vertical-align: top;
-  border-top: 1px solid #ddd;
-}
-.table > thead > tr > th {
-  vertical-align: bottom;
-  border-bottom: 2px solid #ddd;
-}
-.table > caption + thead > tr:first-child > th,
-.table > colgroup + thead > tr:first-child > th,
-.table > thead:first-child > tr:first-child > th,
-.table > caption + thead > tr:first-child > td,
-.table > colgroup + thead > tr:first-child > td,
-.table > thead:first-child > tr:first-child > td {
-  border-top: 0;
-}
-.table > tbody + tbody {
-  border-top: 2px solid #ddd;
-}
-.table .table {
-  background-color: #fff;
-}
-.table-condensed > thead > tr > th,
-.table-condensed > tbody > tr > th,
-.table-condensed > tfoot > tr > th,
-.table-condensed > thead > tr > td,
-.table-condensed > tbody > tr > td,
-.table-condensed > tfoot > tr > td {
-  padding: 5px;
-}
-.table-bordered {
-  border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > tbody > tr > th,
-.table-bordered > tfoot > tr > th,
-.table-bordered > thead > tr > td,
-.table-bordered > tbody > tr > td,
-.table-bordered > tfoot > tr > td {
-  border: 1px solid #ddd;
-}
-.table-bordered > thead > tr > th,
-.table-bordered > thead > tr > td {
-  border-bottom-width: 2px;
-}
-.table-striped > tbody > tr:nth-of-type(odd) {
-  background-color: #f9f9f9;
-}
-.table-hover > tbody > tr:hover {
-  background-color: #f5f5f5;
-}
-table col[class*="col-"] {
-  position: static;
-  float: none;
-  display: table-column;
-}
-table td[class*="col-"],
-table th[class*="col-"] {
-  position: static;
-  float: none;
-  display: table-cell;
-}
-.table > thead > tr > td.active,
-.table > tbody > tr > td.active,
-.table > tfoot > tr > td.active,
-.table > thead > tr > th.active,
-.table > tbody > tr > th.active,
-.table > tfoot > tr > th.active,
-.table > thead > tr.active > td,
-.table > tbody > tr.active > td,
-.table > tfoot > tr.active > td,
-.table > thead > tr.active > th,
-.table > tbody > tr.active > th,
-.table > tfoot > tr.active > th {
-  background-color: #f5f5f5;
-}
-.table-hover > tbody > tr > td.active:hover,
-.table-hover > tbody > tr > th.active:hover,
-.table-hover > tbody > tr.active:hover > td,
-.table-hover > tbody > tr:hover > .active,
-.table-hover > tbody > tr.active:hover > th {
-  background-color: #e8e8e8;
-}
-.table > thead > tr > td.success,
-.table > tbody > tr > td.success,
-.table > tfoot > tr > td.success,
-.table > thead > tr > th.success,
-.table > tbody > tr > th.success,
-.table > tfoot > tr > th.success,
-.table > thead > tr.success > td,
-.table > tbody > tr.success > td,
-.table > tfoot > tr.success > td,
-.table > thead > tr.success > th,
-.table > tbody > tr.success > th,
-.table > tfoot > tr.success > th {
-  background-color: #dff0d8;
-}
-.table-hover > tbody > tr > td.success:hover,
-.table-hover > tbody > tr > th.success:hover,
-.table-hover > tbody > tr.success:hover > td,
-.table-hover > tbody > tr:hover > .success,
-.table-hover > tbody > tr.success:hover > th {
-  background-color: #d0e9c6;
-}
-.table > thead > tr > td.info,
-.table > tbody > tr > td.info,
-.table > tfoot > tr > td.info,
-.table > thead > tr > th.info,
-.table > tbody > tr > th.info,
-.table > tfoot > tr > th.info,
-.table > thead > tr.info > td,
-.table > tbody > tr.info > td,
-.table > tfoot > tr.info > td,
-.table > thead > tr.info > th,
-.table > tbody > tr.info > th,
-.table > tfoot > tr.info > th {
-  background-color: #d9edf7;
-}
-.table-hover > tbody > tr > td.info:hover,
-.table-hover > tbody > tr > th.info:hover,
-.table-hover > tbody > tr.info:hover > td,
-.table-hover > tbody > tr:hover > .info,
-.table-hover > tbody > tr.info:hover > th {
-  background-color: #c4e3f3;
-}
-.table > thead > tr > td.warning,
-.table > tbody > tr > td.warning,
-.table > tfoot > tr > td.warning,
-.table > thead > tr > th.warning,
-.table > tbody > tr > th.warning,
-.table > tfoot > tr > th.warning,
-.table > thead > tr.warning > td,
-.table > tbody > tr.warning > td,
-.table > tfoot > tr.warning > td,
-.table > thead > tr.warning > th,
-.table > tbody > tr.warning > th,
-.table > tfoot > tr.warning > th {
-  background-color: #fcf8e3;
-}
-.table-hover > tbody > tr > td.warning:hover,
-.table-hover > tbody > tr > th.warning:hover,
-.table-hover > tbody > tr.warning:hover > td,
-.table-hover > tbody > tr:hover > .warning,
-.table-hover > tbody > tr.warning:hover > th {
-  background-color: #faf2cc;
-}
-.table > thead > tr > td.danger,
-.table > tbody > tr > td.danger,
-.table > tfoot > tr > td.danger,
-.table > thead > tr > th.danger,
-.table > tbody > tr > th.danger,
-.table > tfoot > tr > th.danger,
-.table > thead > tr.danger > td,
-.table > tbody > tr.danger > td,
-.table > tfoot > tr.danger > td,
-.table > thead > tr.danger > th,
-.table > tbody > tr.danger > th,
-.table > tfoot > tr.danger > th {
-  background-color: #f2dede;
-}
-.table-hover > tbody > tr > td.danger:hover,
-.table-hover > tbody > tr > th.danger:hover,
-.table-hover > tbody > tr.danger:hover > td,
-.table-hover > tbody > tr:hover > .danger,
-.table-hover > tbody > tr.danger:hover > th {
-  background-color: #ebcccc;
-}
-.table-responsive {
-  overflow-x: auto;
-  min-height: 0.01%;
-}
-@media screen and (max-width: 767px) {
-  .table-responsive {
-    width: 100%;
-    margin-bottom: 15px;
-    overflow-y: hidden;
-    -ms-overflow-style: -ms-autohiding-scrollbar;
-    border: 1px solid #ddd;
-  }
-  .table-responsive > .table {
-    margin-bottom: 0;
-  }
-  .table-responsive > .table > thead > tr > th,
-  .table-responsive > .table > tbody > tr > th,
-  .table-responsive > .table > tfoot > tr > th,
-  .table-responsive > .table > thead > tr > td,
-  .table-responsive > .table > tbody > tr > td,
-  .table-responsive > .table > tfoot > tr > td {
-    white-space: nowrap;
-  }
-  .table-responsive > .table-bordered {
-    border: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:first-child,
-  .table-responsive > .table-bordered > tbody > tr > th:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-  .table-responsive > .table-bordered > thead > tr > td:first-child,
-  .table-responsive > .table-bordered > tbody > tr > td:first-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-    border-left: 0;
-  }
-  .table-responsive > .table-bordered > thead > tr > th:last-child,
-  .table-responsive > .table-bordered > tbody > tr > th:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-  .table-responsive > .table-bordered > thead > tr > td:last-child,
-  .table-responsive > .table-bordered > tbody > tr > td:last-child,
-  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-    border-right: 0;
-  }
-  .table-responsive > .table-bordered > tbody > tr:last-child > th,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
-  .table-responsive > .table-bordered > tbody > tr:last-child > td,
-  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
-    border-bottom: 0;
-  }
-}
-fieldset {
-  padding: 0;
-  margin: 0;
-  border: 0;
-  min-width: 0;
-}
-legend {
-  display: block;
-  width: 100%;
-  padding: 0;
-  margin-bottom: 20px;
-  font-size: 21px;
-  line-height: inherit;
-  color: #333333;
-  border: 0;
-  border-bottom: 1px solid #e5e5e5;
-}
-label {
-  display: inline-block;
-  max-width: 100%;
-  margin-bottom: 5px;
-  font-weight: bold;
-}
-input[type="search"] {
-  -webkit-box-sizing: border-box;
-  -moz-box-sizing: border-box;
-  box-sizing: border-box;
-}
-input[type="radio"],
-input[type="checkbox"] {
-  margin: 4px 0 0;
-  margin-top: 1px \9;
-  line-height: normal;
-}
-input[type="file"] {
-  display: block;
-}
-input[type="range"] {
-  display: block;
-  width: 100%;
-}
-select[multiple],
-select[size] {
-  height: auto;
-}
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-output {
-  display: block;
-  padding-top: 7px;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #555555;
-}
-.form-control {
-  display: block;
-  width: 100%;
-  height: 34px;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857143;
-  color: #555555;
-  background-color: #fff;
-  background-image: none;
-  border: 1px solid #ccc;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-.form-control:focus {
-  border-color: #66afe9;
-  outline: 0;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
-  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
-}
-.form-control::-moz-placeholder {
-  color: #999;
-  opacity: 1;
-}
-.form-control:-ms-input-placeholder {
-  color: #999;
-}
-.form-control::-webkit-input-placeholder {
-  color: #999;
-}
-.form-control::-ms-expand {
-  border: 0;
-  background-color: transparent;
-}
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
-  background-color: #eeeeee;
-  opacity: 1;
-}
-.form-control[disabled],
-fieldset[disabled] .form-control {
-  cursor: not-allowed;
-}
-textarea.form-control {
-  height: auto;
-}
-input[type="search"] {
-  -webkit-appearance: none;
-}
-@media screen and (-webkit-min-device-pixel-ratio: 0) {
-  input[type="date"].form-control,
-  input[type="time"].form-control,
-  input[type="datetime-local"].form-control,
-  input[type="month"].form-control {
-    line-height: 34px;
-  }
-  input[type="date"].input-sm,
-  input[type="time"].input-sm,
-  input[type="datetime-local"].input-sm,
-  input[type="month"].input-sm,
-  .input-group-sm input[type="date"],
-  .input-group-sm input[type="time"],
-  .input-group-sm input[type="datetime-local"],
-  .input-group-sm input[type="month"] {
-    line-height: 30px;
-  }
-  input[type="date"].input-lg,
-  input[type="time"].input-lg,
-  input[type="datetime-local"].input-lg,
-  input[type="month"].input-lg,
-  .input-group-lg input[type="date"],
-  .input-group-lg input[type="time"],
-  .input-group-lg input[type="datetime-local"],
-  .input-group-lg input[type="month"] {
-    line-height: 46px;
-  }
-}
-.form-group {
-  margin-bottom: 15px;
-}
-.radio,
-.checkbox {
-  position: relative;
-  display: block;
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-.radio label,
-.checkbox label {
-  min-height: 20px;
-  padding-left: 20px;
-  margin-bottom: 0;
-  font-weight: normal;
-  cursor: pointer;
-}
-.radio input[type="radio"],
-.radio-inline input[type="radio"],
-.checkbox input[type="checkbox"],
-.checkbox-inline input[type="checkbox"] {
-  position: absolute;
-  margin-left: -20px;
-  margin-top: 4px \9;
-}
-.radio + .radio,
-.checkbox + .checkbox {
-  margin-top: -5px;
-}
-.radio-inline,
-.checkbox-inline {
-  position: relative;
-  display: inline-block;
-  padding-left: 20px;
-  margin-bottom: 0;
-  vertical-align: middle;
-  font-weight: normal;
-  cursor: pointer;
-}
-.radio-inline + .radio-inline,
-.checkbox-inline + .checkbox-inline {
-  margin-top: 0;
-  margin-left: 10px;
-}
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
-  cursor: not-allowed;
-}
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
-  cursor: not-allowed;
-}
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
-  cursor: not-allowed;
-}
-.form-control-static {
-  padding-top: 7px;
-  padding-bottom: 7px;
-  margin-bottom: 0;
-  min-height: 34px;
-}
-.form-control-static.input-lg,
-.form-control-static.input-sm {
-  padding-left: 0;
-  padding-right: 0;
-}
-.input-sm {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-select.input-sm {
-  height: 30px;
-  line-height: 30px;
-}
-textarea.input-sm,
-select[multiple].input-sm {
-  height: auto;
-}
-.form-group-sm .form-control {
-  height: 30px;
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-.form-group-sm select.form-control {
-  height: 30px;
-  line-height: 30px;
-}
-.form-group-sm textarea.form-control,
-.form-group-sm select[multiple].form-control {
-  height: auto;
-}
-.form-group-sm .form-control-static {
-  height: 30px;
-  min-height: 32px;
-  padding: 6px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-}
-.input-lg {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.3333333;
-  border-radius: 6px;
-}
-select.input-lg {
-  height: 46px;
-  line-height: 46px;
-}
-textarea.input-lg,
-select[multiple].input-lg {
-  height: auto;
-}
-.form-group-lg .form-control {
-  height: 46px;
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.3333333;
-  border-radius: 6px;
-}
-.form-group-lg select.form-control {
-  height: 46px;
-  line-height: 46px;
-}
-.form-group-lg textarea.form-control,
-.form-group-lg select[multiple].form-control {
-  height: auto;
-}
-.form-group-lg .form-control-static {
-  height: 46px;
-  min-height: 38px;
-  padding: 11px 16px;
-  font-size: 18px;
-  line-height: 1.3333333;
-}
-.has-feedback {
-  position: relative;
-}
-.has-feedback .form-control {
-  padding-right: 42.5px;
-}
-.form-control-feedback {
-  position: absolute;
-  top: 0;
-  right: 0;
-  z-index: 2;
-  display: block;
-  width: 34px;
-  height: 34px;
-  line-height: 34px;
-  text-align: center;
-  pointer-events: none;
-}
-.input-lg + .form-control-feedback,
-.input-group-lg + .form-control-feedback,
-.form-group-lg .form-control + .form-control-feedback {
-  width: 46px;
-  height: 46px;
-  line-height: 46px;
-}
-.input-sm + .form-control-feedback,
-.input-group-sm + .form-control-feedback,
-.form-group-sm .form-control + .form-control-feedback {
-  width: 30px;
-  height: 30px;
-  line-height: 30px;
-}
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline,
-.has-success.radio label,
-.has-success.checkbox label,
-.has-success.radio-inline label,
-.has-success.checkbox-inline label {
-  color: #3c763d;
-}
-.has-success .form-control {
-  border-color: #3c763d;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.has-success .form-control:focus {
-  border-color: #2b542c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
-}
-.has-success .input-group-addon {
-  color: #3c763d;
-  border-color: #3c763d;
-  background-color: #dff0d8;
-}
-.has-success .form-control-feedback {
-  color: #3c763d;
-}
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline,
-.has-warning.radio label,
-.has-warning.checkbox label,
-.has-warning.radio-inline label,
-.has-warning.checkbox-inline label {
-  color: #8a6d3b;
-}
-.has-warning .form-control {
-  border-color: #8a6d3b;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.has-warning .form-control:focus {
-  border-color: #66512c;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
-}
-.has-warning .input-group-addon {
-  color: #8a6d3b;
-  border-color: #8a6d3b;
-  background-color: #fcf8e3;
-}
-.has-warning .form-control-feedback {
-  color: #8a6d3b;
-}
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline,
-.has-error.radio label,
-.has-error.checkbox label,
-.has-error.radio-inline label,
-.has-error.checkbox-inline label {
-  color: #a94442;
-}
-.has-error .form-control {
-  border-color: #a94442;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-}
-.has-error .form-control:focus {
-  border-color: #843534;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
-}
-.has-error .input-group-addon {
-  color: #a94442;
-  border-color: #a94442;
-  background-color: #f2dede;
-}
-.has-error .form-control-feedback {
-  color: #a94442;
-}
-.has-feedback label ~ .form-control-feedback {
-  top: 25px;
-}
-.has-feedback label.sr-only ~ .form-control-feedback {
-  top: 0;
-}
-.help-block {
-  display: block;
-  margin-top: 5px;
-  margin-bottom: 10px;
-  color: #737373;
-}
-@media (min-width: 768px) {
-  .form-inline .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .form-inline .form-control-static {
-    display: inline-block;
-  }
-  .form-inline .input-group {
-    display: inline-table;
-    vertical-align: middle;
-  }
-  .form-inline .input-group .input-group-addon,
-  .form-inline .input-group .input-group-btn,
-  .form-inline .input-group .form-control {
-    width: auto;
-  }
-  .form-inline .input-group > .form-control {
-    width: 100%;
-  }
-  .form-inline .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio,
-  .form-inline .checkbox {
-    display: inline-block;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .form-inline .radio label,
-  .form-inline .checkbox label {
-    padding-left: 0;
-  }
-  .form-inline .radio input[type="radio"],
-  .form-inline .checkbox input[type="checkbox"] {
-    position: relative;
-    margin-left: 0;
-  }
-  .form-inline .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
-  margin-top: 0;
-  margin-bottom: 0;
-  padding-top: 7px;
-}
-.form-horizontal .radio,
-.form-horizontal .checkbox {
-  min-height: 27px;
-}
-.form-horizontal .form-group {
-  margin-left: -15px;
-  margin-right: -15px;
-}
-@media (min-width: 768px) {
-  .form-horizontal .control-label {
-    text-align: right;
-    margin-bottom: 0;
-    padding-top: 7px;
-  }
-}
-.form-horizontal .has-feedback .form-control-feedback {
-  right: 15px;
-}
-@media (min-width: 768px) {
-  .form-horizontal .form-group-lg .control-label {
-    padding-top: 11px;
-    font-size: 18px;
-  }
-}
-@media (min-width: 768px) {
-  .form-horizontal .form-group-sm .control-label {
-    padding-top: 6px;
-    font-size: 12px;
-  }
-}
-.btn {
-  display: inline-block;
-  margin-bottom: 0;
-  font-weight: normal;
-  text-align: center;
-  vertical-align: middle;
-  touch-action: manipulation;
-  cursor: pointer;
-  background-image: none;
-  border: 1px solid transparent;
-  white-space: nowrap;
-  padding: 6px 12px;
-  font-size: 14px;
-  line-height: 1.42857143;
-  border-radius: 4px;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus,
-.btn.focus,
-.btn:active.focus,
-.btn.active.focus {
-  outline: thin dotted;
-  outline: 5px auto -webkit-focus-ring-color;
-  outline-offset: -2px;
-}
-.btn:hover,
-.btn:focus,
-.btn.focus {
-  color: #333;
-  text-decoration: none;
-}
-.btn:active,
-.btn.active {
-  outline: 0;
-  background-image: none;
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
-  cursor: not-allowed;
-  opacity: 0.65;
-  filter: alpha(opacity=65);
-  -webkit-box-shadow: none;
-  box-shadow: none;
-}
-a.btn.disabled,
-fieldset[disabled] a.btn {
-  pointer-events: none;
-}
-.btn-default {
-  color: #333;
-  background-color: #fff;
-  border-color: #ccc;
-}
-.btn-default:focus,
-.btn-default.focus {
-  color: #333;
-  background-color: #e6e6e6;
-  border-color: #8c8c8c;
-}
-.btn-default:hover {
-  color: #333;
-  background-color: #e6e6e6;
-  border-color: #adadad;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
-  color: #333;
-  background-color: #e6e6e6;
-  border-color: #adadad;
-}
-.btn-default:active:hover,
-.btn-default.active:hover,
-.open > .dropdown-toggle.btn-default:hover,
-.btn-default:active:focus,
-.btn-default.active:focus,
-.open > .dropdown-toggle.btn-default:focus,
-.btn-default:active.focus,
-.btn-default.active.focus,
-.open > .dropdown-toggle.btn-default.focus {
-  color: #333;
-  background-color: #d4d4d4;
-  border-color: #8c8c8c;
-}
-.btn-default:active,
-.btn-default.active,
-.open > .dropdown-toggle.btn-default {
-  background-image: none;
-}
-.btn-default.disabled:hover,
-.btn-default[disabled]:hover,
-fieldset[disabled] .btn-default:hover,
-.btn-default.disabled:focus,
-.btn-default[disabled]:focus,
-fieldset[disabled] .btn-default:focus,
-.btn-default.disabled.focus,
-.btn-default[disabled].focus,
-fieldset[disabled] .btn-default.focus {
-  background-color: #fff;
-  border-color: #ccc;
-}
-.btn-default .badge {
-  color: #fff;
-  background-color: #333;
-}
-.btn-primary {
-  color: #fff;
-  background-color: #337ab7;
-  border-color: #2e6da4;
-}
-.btn-primary:focus,
-.btn-primary.focus {
-  color: #fff;
-  background-color: #286090;
-  border-color: #122b40;
-}
-.btn-primary:hover {
-  color: #fff;
-  background-color: #286090;
-  border-color: #204d74;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
-  color: #fff;
-  background-color: #286090;
-  border-color: #204d74;
-}
-.btn-primary:active:hover,
-.btn-primary.active:hover,
-.open > .dropdown-toggle.btn-primary:hover,
-.btn-primary:active:focus,
-.btn-primary.active:focus,
-.open > .dropdown-toggle.btn-primary:focus,
-.btn-primary:active.focus,
-.btn-primary.active.focus,
-.open > .dropdown-toggle.btn-primary.focus {
-  color: #fff;
-  background-color: #204d74;
-  border-color: #122b40;
-}
-.btn-primary:active,
-.btn-primary.active,
-.open > .dropdown-toggle.btn-primary {
-  background-image: none;
-}
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled.focus,
-.btn-primary[disabled].focus,
-fieldset[disabled] .btn-primary.focus {
-  background-color: #337ab7;
-  border-color: #2e6da4;
-}
-.btn-primary .badge {
-  color: #337ab7;
-  background-color: #fff;
-}
-.btn-success {
-  color: #fff;
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-.btn-success:focus,
-.btn-success.focus {
-  color: #fff;
-  background-color: #449d44;
-  border-color: #255625;
-}
-.btn-success:hover {
-  color: #fff;
-  background-color: #449d44;
-  border-color: #398439;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
-  color: #fff;
-  background-color: #449d44;
-  border-color: #398439;
-}
-.btn-success:active:hover,
-.btn-success.active:hover,
-.open > .dropdown-toggle.btn-success:hover,
-.btn-success:active:focus,
-.btn-success.active:focus,
-.open > .dropdown-toggle.btn-success:focus,
-.btn-success:active.focus,
-.btn-success.active.focus,
-.open > .dropdown-toggle.btn-success.focus {
-  color: #fff;
-  background-color: #398439;
-  border-color: #255625;
-}
-.btn-success:active,
-.btn-success.active,
-.open > .dropdown-toggle.btn-success {
-  background-image: none;
-}
-.btn-success.disabled:hover,
-.btn-success[disabled]:hover,
-fieldset[disabled] .btn-success:hover,
-.btn-success.disabled:focus,
-.btn-success[disabled]:focus,
-fieldset[disabled] .btn-success:focus,
-.btn-success.disabled.focus,
-.btn-success[disabled].focus,
-fieldset[disabled] .btn-success.focus {
-  background-color: #5cb85c;
-  border-color: #4cae4c;
-}
-.btn-success .badge {
-  color: #5cb85c;
-  background-color: #fff;
-}
-.btn-info {
-  color: #fff;
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-.btn-info:focus,
-.btn-info.focus {
-  color: #fff;
-  background-color: #31b0d5;
-  border-color: #1b6d85;
-}
-.btn-info:hover {
-  color: #fff;
-  background-color: #31b0d5;
-  border-color: #269abc;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
-  color: #fff;
-  background-color: #31b0d5;
-  border-color: #269abc;
-}
-.btn-info:active:hover,
-.btn-info.active:hover,
-.open > .dropdown-toggle.btn-info:hover,
-.btn-info:active:focus,
-.btn-info.active:focus,
-.open > .dropdown-toggle.btn-info:focus,
-.btn-info:active.focus,
-.btn-info.active.focus,
-.open > .dropdown-toggle.btn-info.focus {
-  color: #fff;
-  background-color: #269abc;
-  border-color: #1b6d85;
-}
-.btn-info:active,
-.btn-info.active,
-.open > .dropdown-toggle.btn-info {
-  background-image: none;
-}
-.btn-info.disabled:hover,
-.btn-info[disabled]:hover,
-fieldset[disabled] .btn-info:hover,
-.btn-info.disabled:focus,
-.btn-info[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled.focus,
-.btn-info[disabled].focus,
-fieldset[disabled] .btn-info.focus {
-  background-color: #5bc0de;
-  border-color: #46b8da;
-}
-.btn-info .badge {
-  color: #5bc0de;
-  background-color: #fff;
-}
-.btn-warning {
-  color: #fff;
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-.btn-warning:focus,
-.btn-warning.focus {
-  color: #fff;
-  background-color: #ec971f;
-  border-color: #985f0d;
-}
-.btn-warning:hover {
-  color: #fff;
-  background-color: #ec971f;
-  border-color: #d58512;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
-  color: #fff;
-  background-color: #ec971f;
-  border-color: #d58512;
-}
-.btn-warning:active:hover,
-.btn-warning.active:hover,
-.open > .dropdown-toggle.btn-warning:hover,
-.btn-warning:active:focus,
-.btn-warning.active:focus,
-.open > .dropdown-toggle.btn-warning:focus,
-.btn-warning:active.focus,
-.btn-warning.active.focus,
-.open > .dropdown-toggle.btn-warning.focus {
-  color: #fff;
-  background-color: #d58512;
-  border-color: #985f0d;
-}
-.btn-warning:active,
-.btn-warning.active,
-.open > .dropdown-toggle.btn-warning {
-  background-image: none;
-}
-.btn-warning.disabled:hover,
-.btn-warning[disabled]:hover,
-fieldset[disabled] .btn-warning:hover,
-.btn-warning.disabled:focus,
-.btn-warning[disabled]:focus,
-fieldset[disabled] .btn-warning:focus,
-.btn-warning.disabled.focus,
-.btn-warning[disabled].focus,
-fieldset[disabled] .btn-warning.focus {
-  background-color: #f0ad4e;
-  border-color: #eea236;
-}
-.btn-warning .badge {
-  color: #f0ad4e;
-  background-color: #fff;
-}
-.btn-danger {
-  color: #fff;
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-.btn-danger:focus,
-.btn-danger.focus {
-  color: #fff;
-  background-color: #c9302c;
-  border-color: #761c19;
-}
-.btn-danger:hover {
-  color: #fff;
-  background-color: #c9302c;
-  border-color: #ac2925;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
-  color: #fff;
-  background-color: #c9302c;
-  border-color: #ac2925;
-}
-.btn-danger:active:hover,
-.btn-danger.active:hover,
-.open > .dropdown-toggle.btn-danger:hover,
-.btn-danger:active:focus,
-.btn-danger.active:focus,
-.open > .dropdown-toggle.btn-danger:focus,
-.btn-danger:active.focus,
-.btn-danger.active.focus,
-.open > .dropdown-toggle.btn-danger.focus {
-  color: #fff;
-  background-color: #ac2925;
-  border-color: #761c19;
-}
-.btn-danger:active,
-.btn-danger.active,
-.open > .dropdown-toggle.btn-danger {
-  background-image: none;
-}
-.btn-danger.disabled:hover,
-.btn-danger[disabled]:hover,
-fieldset[disabled] .btn-danger:hover,
-.btn-danger.disabled:focus,
-.btn-danger[disabled]:focus,
-fieldset[disabled] .btn-danger:focus,
-.btn-danger.disabled.focus,
-.btn-danger[disabled].focus,
-fieldset[disabled] .btn-danger.focus {
-  background-color: #d9534f;
-  border-color: #d43f3a;
-}
-.btn-danger .badge {
-  color: #d9534f;
-  background-color: #fff;
-}
-.btn-link {
-  color: #337ab7;
-  font-weight: normal;
-  border-radius: 0;
-}
-.btn-link,
-.btn-link:active,
-.btn-link.active,
-.btn-link[disabled],
-fieldset[disabled] .btn-link {
-  background-color: transparent;
-  -webkit-box-shadow: none;
-  box-shadow: none;
-}
-.btn-link,
-.btn-link:hover,
-.btn-link:focus,
-.btn-link:active {
-  border-color: transparent;
-}
-.btn-link:hover,
-.btn-link:focus {
-  color: #23527c;
-  text-decoration: underline;
-  background-color: transparent;
-}
-.btn-link[disabled]:hover,
-fieldset[disabled] .btn-link:hover,
-.btn-link[disabled]:focus,
-fieldset[disabled] .btn-link:focus {
-  color: #777777;
-  text-decoration: none;
-}
-.btn-lg,
-.btn-group-lg > .btn {
-  padding: 10px 16px;
-  font-size: 18px;
-  line-height: 1.3333333;
-  border-radius: 6px;
-}
-.btn-sm,
-.btn-group-sm > .btn {
-  padding: 5px 10px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-.btn-xs,
-.btn-group-xs > .btn {
-  padding: 1px 5px;
-  font-size: 12px;
-  line-height: 1.5;
-  border-radius: 3px;
-}
-.btn-block {
-  display: block;
-  width: 100%;
-}
-.btn-block + .btn-block {
-  margin-top: 5px;
-}
-input[type="submit"].btn-block,
-input[type="reset"].btn-block,
-input[type="button"].btn-block {
-  width: 100%;
-}
-.fade {
-  opacity: 0;
-  -webkit-transition: opacity 0.15s linear;
-  -o-transition: opacity 0.15s linear;
-  transition: opacity 0.15s linear;
-}
-.fade.in {
-  opacity: 1;
-}
-.collapse {
-  display: none;
-}
-.collapse.in {
-  display: block;
-}
-tr.collapse.in {
-  display: table-row;
-}
-tbody.collapse.in {
-  display: table-row-group;
-}
-.collapsing {
-  position: relative;
-  height: 0;
-  overflow: hidden;
-  -webkit-transition-property: height, visibility;
-  transition-property: height, visibility;
-  -webkit-transition-duration: 0.35s;
-  transition-duration: 0.35s;
-  -webkit-transition-timing-function: ease;
-  transition-timing-function: ease;
-}
-.caret {
-  display: inline-block;
-  width: 0;
-  height: 0;
-  margin-left: 2px;
-  vertical-align: middle;
-  border-top: 4px dashed;
-  border-top: 4px solid \9;
-  border-right: 4px solid transparent;
-  border-left: 4px solid transparent;
-}
-.dropup,
-.dropdown {
-  position: relative;
-}
-.dropdown-toggle:focus {
-  outline: 0;
-}
-.dropdown-menu {
-  position: absolute;
-  top: 100%;
-  left: 0;
-  z-index: 1000;
-  display: none;
-  float: left;
-  min-width: 160px;
-  padding: 5px 0;
-  margin: 2px 0 0;
-  list-style: none;
-  font-size: 14px;
-  text-align: left;
-  background-color: #fff;
-  border: 1px solid #ccc;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  border-radius: 4px;
-  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
-  background-clip: padding-box;
-}
-.dropdown-menu.pull-right {
-  right: 0;
-  left: auto;
-}
-.dropdown-menu .divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-.dropdown-menu > li > a {
-  display: block;
-  padding: 3px 20px;
-  clear: both;
-  font-weight: normal;
-  line-height: 1.42857143;
-  color: #333333;
-  white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > a:focus {
-  text-decoration: none;
-  color: #262626;
-  background-color: #f5f5f5;
-}
-.dropdown-menu > .active > a,
-.dropdown-menu > .active > a:hover,
-.dropdown-menu > .active > a:focus {
-  color: #fff;
-  text-decoration: none;
-  outline: 0;
-  background-color: #337ab7;
-}
-.dropdown-menu > .disabled > a,
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  color: #777777;
-}
-.dropdown-menu > .disabled > a:hover,
-.dropdown-menu > .disabled > a:focus {
-  text-decoration: none;
-  background-color: transparent;
-  background-image: none;
-  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
-  cursor: not-allowed;
-}
-.open > .dropdown-menu {
-  display: block;
-}
-.open > a {
-  outline: 0;
-}
-.dropdown-menu-right {
-  left: auto;
-  right: 0;
-}
-.dropdown-menu-left {
-  left: 0;
-  right: auto;
-}
-.dropdown-header {
-  display: block;
-  padding: 3px 20px;
-  font-size: 12px;
-  line-height: 1.42857143;
-  color: #777777;
-  white-space: nowrap;
-}
-.dropdown-backdrop {
-  position: fixed;
-  left: 0;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  z-index: 990;
-}
-.pull-right > .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
-  border-top: 0;
-  border-bottom: 4px dashed;
-  border-bottom: 4px solid \9;
-  content: "";
-}
-.dropup .dropdown-menu,
-.navbar-fixed-bottom .dropdown .dropdown-menu {
-  top: auto;
-  bottom: 100%;
-  margin-bottom: 2px;
-}
-@media (min-width: 768px) {
-  .navbar-right .dropdown-menu {
-    left: auto;
-    right: 0;
-  }
-  .navbar-right .dropdown-menu-left {
-    left: 0;
-    right: auto;
-  }
-}
-.nav {
-  margin-bottom: 0;
-  padding-left: 0;
-  list-style: none;
-}
-.nav > li {
-  position: relative;
-  display: block;
-}
-.nav > li > a {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-}
-.nav > li > a:hover,
-.nav > li > a:focus {
-  text-decoration: none;
-  background-color: #eeeeee;
-}
-.nav > li.disabled > a {
-  color: #777777;
-}
-.nav > li.disabled > a:hover,
-.nav > li.disabled > a:focus {
-  color: #777777;
-  text-decoration: none;
-  background-color: transparent;
-  cursor: not-allowed;
-}
-.nav .open > a,
-.nav .open > a:hover,
-.nav .open > a:focus {
-  background-color: #eeeeee;
-  border-color: #337ab7;
-}
-.nav .nav-divider {
-  height: 1px;
-  margin: 9px 0;
-  overflow: hidden;
-  background-color: #e5e5e5;
-}
-.nav > li > a > img {
-  max-width: none;
-}
-.nav-tabs {
-  border-bottom: 1px solid #ddd;
-}
-.nav-tabs > li {
-  float: left;
-  margin-bottom: -1px;
-}
-.nav-tabs > li > a {
-  margin-right: 2px;
-  line-height: 1.42857143;
-  border: 1px solid transparent;
-  border-radius: 4px 4px 0 0;
-}
-.nav-tabs > li > a:hover {
-  border-color: #eeeeee #eeeeee #ddd;
-}
-.nav-tabs > li.active > a,
-.nav-tabs > li.active > a:hover,
-.nav-tabs > li.active > a:focus {
-  color: #555555;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-bottom-color: transparent;
-  cursor: default;
-}
-.nav-tabs.nav-justified {
-  width: 100%;
-  border-bottom: 0;
-}
-.nav-tabs.nav-justified > li {
-  float: none;
-}
-.nav-tabs.nav-justified > li > a {
-  text-align: center;
-  margin-bottom: 5px;
-}
-.nav-tabs.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-tabs.nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs.nav-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs.nav-justified > .active > a,
-.nav-tabs.nav-justified > .active > a:hover,
-.nav-tabs.nav-justified > .active > a:focus {
-  border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-  .nav-tabs.nav-justified > li > a {
-    border-bottom: 1px solid #ddd;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs.nav-justified > .active > a,
-  .nav-tabs.nav-justified > .active > a:hover,
-  .nav-tabs.nav-justified > .active > a:focus {
-    border-bottom-color: #fff;
-  }
-}
-.nav-pills > li {
-  float: left;
-}
-.nav-pills > li > a {
-  border-radius: 4px;
-}
-.nav-pills > li + li {
-  margin-left: 2px;
-}
-.nav-pills > li.active > a,
-.nav-pills > li.active > a:hover,
-.nav-pills > li.active > a:focus {
-  color: #fff;
-  background-color: #337ab7;
-}
-.nav-stacked > li {
-  float: none;
-}
-.nav-stacked > li + li {
-  margin-top: 2px;
-  margin-left: 0;
-}
-.nav-justified {
-  width: 100%;
-}
-.nav-justified > li {
-  float: none;
-}
-.nav-justified > li > a {
-  text-align: center;
-  margin-bottom: 5px;
-}
-.nav-justified > .dropdown .dropdown-menu {
-  top: auto;
-  left: auto;
-}
-@media (min-width: 768px) {
-  .nav-justified > li {
-    display: table-cell;
-    width: 1%;
-  }
-  .nav-justified > li > a {
-    margin-bottom: 0;
-  }
-}
-.nav-tabs-justified {
-  border-bottom: 0;
-}
-.nav-tabs-justified > li > a {
-  margin-right: 0;
-  border-radius: 4px;
-}
-.nav-tabs-justified > .active > a,
-.nav-tabs-justified > .active > a:hover,
-.nav-tabs-justified > .active > a:focus {
-  border: 1px solid #ddd;
-}
-@media (min-width: 768px) {
-  .nav-tabs-justified > li > a {
-    border-bottom: 1px solid #ddd;
-    border-radius: 4px 4px 0 0;
-  }
-  .nav-tabs-justified > .active > a,
-  .nav-tabs-justified > .active > a:hover,
-  .nav-tabs-justified > .active > a:focus {
-    border-bottom-color: #fff;
-  }
-}
-.tab-content > .tab-pane {
-  display: none;
-}
-.tab-content > .active {
-  display: block;
-}
-.nav-tabs .dropdown-menu {
-  margin-top: -1px;
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-.navbar {
-  position: relative;
-  min-height: 50px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-}
-@media (min-width: 768px) {
-  .navbar {
-    border-radius: 4px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-header {
-    float: left;
-  }
-}
-.navbar-collapse {
-  overflow-x: visible;
-  padding-right: 15px;
-  padding-left: 15px;
-  border-top: 1px solid transparent;
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
-  -webkit-overflow-scrolling: touch;
-}
-.navbar-collapse.in {
-  overflow-y: auto;
-}
-@media (min-width: 768px) {
-  .navbar-collapse {
-    width: auto;
-    border-top: 0;
-    box-shadow: none;
-  }
-  .navbar-collapse.collapse {
-    display: block !important;
-    height: auto !important;
-    padding-bottom: 0;
-    overflow: visible !important;
-  }
-  .navbar-collapse.in {
-    overflow-y: visible;
-  }
-  .navbar-fixed-top .navbar-collapse,
-  .navbar-static-top .navbar-collapse,
-  .navbar-fixed-bottom .navbar-collapse {
-    padding-left: 0;
-    padding-right: 0;
-  }
-}
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
-  max-height: 340px;
-}
-@media (max-device-width: 480px) and (orientation: landscape) {
-  .navbar-fixed-top .navbar-collapse,
-  .navbar-fixed-bottom .navbar-collapse {
-    max-height: 200px;
-  }
-}
-.container > .navbar-header,
-.container-fluid > .navbar-header,
-.container > .navbar-collapse,
-.container-fluid > .navbar-collapse {
-  margin-right: -15px;
-  margin-left: -15px;
-}
-@media (min-width: 768px) {
-  .container > .navbar-header,
-  .container-fluid > .navbar-header,
-  .container > .navbar-collapse,
-  .container-fluid > .navbar-collapse {
-    margin-right: 0;
-    margin-left: 0;
-  }
-}
-.navbar-static-top {
-  z-index: 1000;
-  border-width: 0 0 1px;
-}
-@media (min-width: 768px) {
-  .navbar-static-top {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top,
-.navbar-fixed-bottom {
-  position: fixed;
-  right: 0;
-  left: 0;
-  z-index: 1030;
-}
-@media (min-width: 768px) {
-  .navbar-fixed-top,
-  .navbar-fixed-bottom {
-    border-radius: 0;
-  }
-}
-.navbar-fixed-top {
-  top: 0;
-  border-width: 0 0 1px;
-}
-.navbar-fixed-bottom {
-  bottom: 0;
-  margin-bottom: 0;
-  border-width: 1px 0 0;
-}
-.navbar-brand {
-  float: left;
-  padding: 15px 15px;
-  font-size: 18px;
-  line-height: 20px;
-  height: 50px;
-}
-.navbar-brand:hover,
-.navbar-brand:focus {
-  text-decoration: none;
-}
-.navbar-brand > img {
-  display: block;
-}
-@media (min-width: 768px) {
-  .navbar > .container .navbar-brand,
-  .navbar > .container-fluid .navbar-brand {
-    margin-left: -15px;
-  }
-}
-.navbar-toggle {
-  position: relative;
-  float: right;
-  margin-right: 15px;
-  padding: 9px 10px;
-  margin-top: 8px;
-  margin-bottom: 8px;
-  background-color: transparent;
-  background-image: none;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.navbar-toggle:focus {
-  outline: 0;
-}
-.navbar-toggle .icon-bar {
-  display: block;
-  width: 22px;
-  height: 2px;
-  border-radius: 1px;
-}
-.navbar-toggle .icon-bar + .icon-bar {
-  margin-top: 4px;
-}
-@media (min-width: 768px) {
-  .navbar-toggle {
-    display: none;
-  }
-}
-.navbar-nav {
-  margin: 7.5px -15px;
-}
-.navbar-nav > li > a {
-  padding-top: 10px;
-  padding-bottom: 10px;
-  line-height: 20px;
-}
-@media (max-width: 767px) {
-  .navbar-nav .open .dropdown-menu {
-    position: static;
-    float: none;
-    width: auto;
-    margin-top: 0;
-    background-color: transparent;
-    border: 0;
-    box-shadow: none;
-  }
-  .navbar-nav .open .dropdown-menu > li > a,
-  .navbar-nav .open .dropdown-menu .dropdown-header {
-    padding: 5px 15px 5px 25px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a {
-    line-height: 20px;
-  }
-  .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-nav .open .dropdown-menu > li > a:focus {
-    background-image: none;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-nav {
-    float: left;
-    margin: 0;
-  }
-  .navbar-nav > li {
-    float: left;
-  }
-  .navbar-nav > li > a {
-    padding-top: 15px;
-    padding-bottom: 15px;
-  }
-}
-.navbar-form {
-  margin-left: -15px;
-  margin-right: -15px;
-  padding: 10px 15px;
-  border-top: 1px solid transparent;
-  border-bottom: 1px solid transparent;
-  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
-  margin-top: 8px;
-  margin-bottom: 8px;
-}
-@media (min-width: 768px) {
-  .navbar-form .form-group {
-    display: inline-block;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .form-control {
-    display: inline-block;
-    width: auto;
-    vertical-align: middle;
-  }
-  .navbar-form .form-control-static {
-    display: inline-block;
-  }
-  .navbar-form .input-group {
-    display: inline-table;
-    vertical-align: middle;
-  }
-  .navbar-form .input-group .input-group-addon,
-  .navbar-form .input-group .input-group-btn,
-  .navbar-form .input-group .form-control {
-    width: auto;
-  }
-  .navbar-form .input-group > .form-control {
-    width: 100%;
-  }
-  .navbar-form .control-label {
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio,
-  .navbar-form .checkbox {
-    display: inline-block;
-    margin-top: 0;
-    margin-bottom: 0;
-    vertical-align: middle;
-  }
-  .navbar-form .radio label,
-  .navbar-form .checkbox label {
-    padding-left: 0;
-  }
-  .navbar-form .radio input[type="radio"],
-  .navbar-form .checkbox input[type="checkbox"] {
-    position: relative;
-    margin-left: 0;
-  }
-  .navbar-form .has-feedback .form-control-feedback {
-    top: 0;
-  }
-}
-@media (max-width: 767px) {
-  .navbar-form .form-group {
-    margin-bottom: 5px;
-  }
-  .navbar-form .form-group:last-child {
-    margin-bottom: 0;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-form {
-    width: auto;
-    border: 0;
-    margin-left: 0;
-    margin-right: 0;
-    padding-top: 0;
-    padding-bottom: 0;
-    -webkit-box-shadow: none;
-    box-shadow: none;
-  }
-}
-.navbar-nav > li > .dropdown-menu {
-  margin-top: 0;
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
-  margin-bottom: 0;
-  border-top-right-radius: 4px;
-  border-top-left-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.navbar-btn {
-  margin-top: 8px;
-  margin-bottom: 8px;
-}
-.navbar-btn.btn-sm {
-  margin-top: 10px;
-  margin-bottom: 10px;
-}
-.navbar-btn.btn-xs {
-  margin-top: 14px;
-  margin-bottom: 14px;
-}
-.navbar-text {
-  margin-top: 15px;
-  margin-bottom: 15px;
-}
-@media (min-width: 768px) {
-  .navbar-text {
-    float: left;
-    margin-left: 15px;
-    margin-right: 15px;
-  }
-}
-@media (min-width: 768px) {
-  .navbar-left {
-    float: left !important;
-  }
-  .navbar-right {
-    float: right !important;
-    margin-right: -15px;
-  }
-  .navbar-right ~ .navbar-right {
-    margin-right: 0;
-  }
-}
-.navbar-default {
-  background-color: #f8f8f8;
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-brand {
-  color: #777;
-}
-.navbar-default .navbar-brand:hover,
-.navbar-default .navbar-brand:focus {
-  color: #5e5e5e;
-  background-color: transparent;
-}
-.navbar-default .navbar-text {
-  color: #777;
-}
-.navbar-default .navbar-nav > li > a {
-  color: #777;
-}
-.navbar-default .navbar-nav > li > a:hover,
-.navbar-default .navbar-nav > li > a:focus {
-  color: #333;
-  background-color: transparent;
-}
-.navbar-default .navbar-nav > .active > a,
-.navbar-default .navbar-nav > .active > a:hover,
-.navbar-default .navbar-nav > .active > a:focus {
-  color: #555;
-  background-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .disabled > a,
-.navbar-default .navbar-nav > .disabled > a:hover,
-.navbar-default .navbar-nav > .disabled > a:focus {
-  color: #ccc;
-  background-color: transparent;
-}
-.navbar-default .navbar-toggle {
-  border-color: #ddd;
-}
-.navbar-default .navbar-toggle:hover,
-.navbar-default .navbar-toggle:focus {
-  background-color: #ddd;
-}
-.navbar-default .navbar-toggle .icon-bar {
-  background-color: #888;
-}
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
-  border-color: #e7e7e7;
-}
-.navbar-default .navbar-nav > .open > a,
-.navbar-default .navbar-nav > .open > a:hover,
-.navbar-default .navbar-nav > .open > a:focus {
-  background-color: #e7e7e7;
-  color: #555;
-}
-@media (max-width: 767px) {
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
-    color: #777;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #333;
-    background-color: transparent;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #555;
-    background-color: #e7e7e7;
-  }
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #ccc;
-    background-color: transparent;
-  }
-}
-.navbar-default .navbar-link {
-  color: #777;
-}
-.navbar-default .navbar-link:hover {
-  color: #333;
-}
-.navbar-default .btn-link {
-  color: #777;
-}
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
-  color: #333;
-}
-.navbar-default .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-default .btn-link:hover,
-.navbar-default .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-default .btn-link:focus {
-  color: #ccc;
-}
-.navbar-inverse {
-  background-color: #222;
-  border-color: #080808;
-}
-.navbar-inverse .navbar-brand {
-  color: #9d9d9d;
-}
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
-  color: #fff;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-text {
-  color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a {
-  color: #9d9d9d;
-}
-.navbar-inverse .navbar-nav > li > a:hover,
-.navbar-inverse .navbar-nav > li > a:focus {
-  color: #fff;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-nav > .active > a,
-.navbar-inverse .navbar-nav > .active > a:hover,
-.navbar-inverse .navbar-nav > .active > a:focus {
-  color: #fff;
-  background-color: #080808;
-}
-.navbar-inverse .navbar-nav > .disabled > a,
-.navbar-inverse .navbar-nav > .disabled > a:hover,
-.navbar-inverse .navbar-nav > .disabled > a:focus {
-  color: #444;
-  background-color: transparent;
-}
-.navbar-inverse .navbar-toggle {
-  border-color: #333;
-}
-.navbar-inverse .navbar-toggle:hover,
-.navbar-inverse .navbar-toggle:focus {
-  background-color: #333;
-}
-.navbar-inverse .navbar-toggle .icon-bar {
-  background-color: #fff;
-}
-.navbar-inverse .navbar-collapse,
-.navbar-inverse .navbar-form {
-  border-color: #101010;
-}
-.navbar-inverse .navbar-nav > .open > a,
-.navbar-inverse .navbar-nav > .open > a:hover,
-.navbar-inverse .navbar-nav > .open > a:focus {
-  background-color: #080808;
-  color: #fff;
-}
-@media (max-width: 767px) {
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
-    border-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
-    background-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
-    color: #9d9d9d;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
-    color: #fff;
-    background-color: transparent;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
-    color: #fff;
-    background-color: #080808;
-  }
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
-  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
-    color: #444;
-    background-color: transparent;
-  }
-}
-.navbar-inverse .navbar-link {
-  color: #9d9d9d;
-}
-.navbar-inverse .navbar-link:hover {
-  color: #fff;
-}
-.navbar-inverse .btn-link {
-  color: #9d9d9d;
-}
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
-  color: #fff;
-}
-.navbar-inverse .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-inverse .btn-link:focus {
-  color: #444;
-}
-.alert {
-  padding: 15px;
-  margin-bottom: 20px;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-.alert h4 {
-  margin-top: 0;
-  color: inherit;
-}
-.alert .alert-link {
-  font-weight: bold;
-}
-.alert > p,
-.alert > ul {
-  margin-bottom: 0;
-}
-.alert > p + p {
-  margin-top: 5px;
-}
-.alert-dismissable,
-.alert-dismissible {
-  padding-right: 35px;
-}
-.alert-dismissable .close,
-.alert-dismissible .close {
-  position: relative;
-  top: -2px;
-  right: -21px;
-  color: inherit;
-}
-.alert-success {
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-  color: #3c763d;
-}
-.alert-success hr {
-  border-top-color: #c9e2b3;
-}
-.alert-success .alert-link {
-  color: #2b542c;
-}
-.alert-info {
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-  color: #31708f;
-}
-.alert-info hr {
-  border-top-color: #a6e1ec;
-}
-.alert-info .alert-link {
-  color: #245269;
-}
-.alert-warning {
-  background-color: #fcf8e3;
-  border-color: #faebcc;
-  color: #8a6d3b;
-}
-.alert-warning hr {
-  border-top-color: #f7e1b5;
-}
-.alert-warning .alert-link {
-  color: #66512c;
-}
-.alert-danger {
-  background-color: #f2dede;
-  border-color: #ebccd1;
-  color: #a94442;
-}
-.alert-danger hr {
-  border-top-color: #e4b9c0;
-}
-.alert-danger .alert-link {
-  color: #843534;
-}
-@-webkit-keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-@keyframes progress-bar-stripes {
-  from {
-    background-position: 40px 0;
-  }
-  to {
-    background-position: 0 0;
-  }
-}
-.progress {
-  overflow: hidden;
-  height: 20px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
-}
-.progress-bar {
-  float: left;
-  width: 0%;
-  height: 100%;
-  font-size: 12px;
-  line-height: 20px;
-  color: #fff;
-  text-align: center;
-  background-color: #337ab7;
-  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
-  -webkit-transition: width 0.6s ease;
-  -o-transition: width 0.6s ease;
-  transition: width 0.6s ease;
-}
-.progress-striped .progress-bar,
-.progress-bar-striped {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-size: 40px 40px;
-}
-.progress.active .progress-bar,
-.progress-bar.active {
-  -webkit-animation: progress-bar-stripes 2s linear infinite;
-  -o-animation: progress-bar-stripes 2s linear infinite;
-  animation: progress-bar-stripes 2s linear infinite;
-}
-.progress-bar-success {
-  background-color: #5cb85c;
-}
-.progress-striped .progress-bar-success {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-bar-info {
-  background-color: #5bc0de;
-}
-.progress-striped .progress-bar-info {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-bar-warning {
-  background-color: #f0ad4e;
-}
-.progress-striped .progress-bar-warning {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.progress-bar-danger {
-  background-color: #d9534f;
-}
-.progress-striped .progress-bar-danger {
-  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
-}
-.media {
-  margin-top: 15px;
-}
-.media:first-child {
-  margin-top: 0;
-}
-.media,
-.media-body {
-  zoom: 1;
-  overflow: hidden;
-}
-.media-body {
-  width: 10000px;
-}
-.media-object {
-  display: block;
-}
-.media-object.img-thumbnail {
-  max-width: none;
-}
-.media-right,
-.media > .pull-right {
-  padding-left: 10px;
-}
-.media-left,
-.media > .pull-left {
-  padding-right: 10px;
-}
-.media-left,
-.media-right,
-.media-body {
-  display: table-cell;
-  vertical-align: top;
-}
-.media-middle {
-  vertical-align: middle;
-}
-.media-bottom {
-  vertical-align: bottom;
-}
-.media-heading {
-  margin-top: 0;
-  margin-bottom: 5px;
-}
-.media-list {
-  padding-left: 0;
-  list-style: none;
-}
-.btn-group,
-.btn-group-vertical {
-  position: relative;
-  display: inline-block;
-  vertical-align: middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn {
-  position: relative;
-  float: left;
-}
-.btn-group > .btn:hover,
-.btn-group-vertical > .btn:hover,
-.btn-group > .btn:focus,
-.btn-group-vertical > .btn:focus,
-.btn-group > .btn:active,
-.btn-group-vertical > .btn:active,
-.btn-group > .btn.active,
-.btn-group-vertical > .btn.active {
-  z-index: 2;
-}
-.btn-group .btn + .btn,
-.btn-group .btn + .btn-group,
-.btn-group .btn-group + .btn,
-.btn-group .btn-group + .btn-group {
-  margin-left: -1px;
-}
-.btn-toolbar {
-  margin-left: -5px;
-}
-.btn-toolbar .btn,
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
-  float: left;
-}
-.btn-toolbar > .btn,
-.btn-toolbar > .btn-group,
-.btn-toolbar > .input-group {
-  margin-left: 5px;
-}
-.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
-  border-radius: 0;
-}
-.btn-group > .btn:first-child {
-  margin-left: 0;
-}
-.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
-  border-bottom-right-radius: 0;
-  border-top-right-radius: 0;
-}
-.btn-group > .btn:last-child:not(:first-child),
-.btn-group > .dropdown-toggle:not(:first-child) {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0;
-}
-.btn-group > .btn-group {
-  float: left;
-}
-.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-top-right-radius: 0;
-}
-.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  border-bottom-left-radius: 0;
-  border-top-left-radius: 0;
-}
-.btn-group .dropdown-toggle:active,
-.btn-group.open .dropdown-toggle {
-  outline: 0;
-}
-.btn-group > .btn + .dropdown-toggle {
-  padding-left: 8px;
-  padding-right: 8px;
-}
-.btn-group > .btn-lg + .dropdown-toggle {
-  padding-left: 12px;
-  padding-right: 12px;
-}
-.btn-group.open .dropdown-toggle {
-  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
-}
-.btn-group.open .dropdown-toggle.btn-link {
-  -webkit-box-shadow: none;
-  box-shadow: none;
-}
-.btn .caret {
-  margin-left: 0;
-}
-.btn-lg .caret {
-  border-width: 5px 5px 0;
-  border-bottom-width: 0;
-}
-.dropup .btn-lg .caret {
-  border-width: 0 5px 5px;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group,
-.btn-group-vertical > .btn-group > .btn {
-  display: block;
-  float: none;
-  width: 100%;
-  max-width: 100%;
-}
-.btn-group-vertical > .btn-group > .btn {
-  float: none;
-}
-.btn-group-vertical > .btn + .btn,
-.btn-group-vertical > .btn + .btn-group,
-.btn-group-vertical > .btn-group + .btn,
-.btn-group-vertical > .btn-group + .btn-group {
-  margin-top: -1px;
-  margin-left: 0;
-}
-.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn:first-child:not(:last-child) {
-  border-top-right-radius: 4px;
-  border-top-left-radius: 4px;
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn:last-child:not(:first-child) {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-  border-bottom-right-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
-  border-radius: 0;
-}
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
-.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-}
-.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-.btn-group-justified {
-  display: table;
-  width: 100%;
-  table-layout: fixed;
-  border-collapse: separate;
-}
-.btn-group-justified > .btn,
-.btn-group-justified > .btn-group {
-  float: none;
-  display: table-cell;
-  width: 1%;
-}
-.btn-group-justified > .btn-group .btn {
-  width: 100%;
-}
-.btn-group-justified > .btn-group .dropdown-menu {
-  left: auto;
-}
-[data-toggle="buttons"] > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
-[data-toggle="buttons"] > .btn input[type="checkbox"],
-[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
-  position: absolute;
-  clip: rect(0, 0, 0, 0);
-  pointer-events: none;
-}
-.list-group {
-  margin-bottom: 20px;
-  padding-left: 0;
-}
-.list-group-item {
-  position: relative;
-  display: block;
-  padding: 10px 15px;
-  margin-bottom: -1px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-}
-.list-group-item:first-child {
-  border-top-right-radius: 4px;
-  border-top-left-radius: 4px;
-}
-.list-group-item:last-child {
-  margin-bottom: 0;
-  border-bottom-right-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-a.list-group-item,
-button.list-group-item {
-  color: #555;
-}
-a.list-group-item .list-group-item-heading,
-button.list-group-item .list-group-item-heading {
-  color: #333;
-}
-a.list-group-item:hover,
-button.list-group-item:hover,
-a.list-group-item:focus,
-button.list-group-item:focus {
-  text-decoration: none;
-  color: #555;
-  background-color: #f5f5f5;
-}
-button.list-group-item {
-  width: 100%;
-  text-align: left;
-}
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
-  background-color: #eeeeee;
-  color: #777777;
-  cursor: not-allowed;
-}
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
-  color: inherit;
-}
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
-  color: #777777;
-}
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
-  z-index: 2;
-  color: #fff;
-  background-color: #337ab7;
-  border-color: #337ab7;
-}
-.list-group-item.active .list-group-item-heading,
-.list-group-item.active:hover .list-group-item-heading,
-.list-group-item.active:focus .list-group-item-heading,
-.list-group-item.active .list-group-item-heading > small,
-.list-group-item.active:hover .list-group-item-heading > small,
-.list-group-item.active:focus .list-group-item-heading > small,
-.list-group-item.active .list-group-item-heading > .small,
-.list-group-item.active:hover .list-group-item-heading > .small,
-.list-group-item.active:focus .list-group-item-heading > .small {
-  color: inherit;
-}
-.list-group-item.active .list-group-item-text,
-.list-group-item.active:hover .list-group-item-text,
-.list-group-item.active:focus .list-group-item-text {
-  color: #c7ddef;
-}
-.list-group-item-success {
-  color: #3c763d;
-  background-color: #dff0d8;
-}
-a.list-group-item-success,
-button.list-group-item-success {
-  color: #3c763d;
-}
-a.list-group-item-success .list-group-item-heading,
-button.list-group-item-success .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-success:hover,
-button.list-group-item-success:hover,
-a.list-group-item-success:focus,
-button.list-group-item-success:focus {
-  color: #3c763d;
-  background-color: #d0e9c6;
-}
-a.list-group-item-success.active,
-button.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-button.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus,
-button.list-group-item-success.active:focus {
-  color: #fff;
-  background-color: #3c763d;
-  border-color: #3c763d;
-}
-.list-group-item-info {
-  color: #31708f;
-  background-color: #d9edf7;
-}
-a.list-group-item-info,
-button.list-group-item-info {
-  color: #31708f;
-}
-a.list-group-item-info .list-group-item-heading,
-button.list-group-item-info .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-info:hover,
-button.list-group-item-info:hover,
-a.list-group-item-info:focus,
-button.list-group-item-info:focus {
-  color: #31708f;
-  background-color: #c4e3f3;
-}
-a.list-group-item-info.active,
-button.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-button.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus,
-button.list-group-item-info.active:focus {
-  color: #fff;
-  background-color: #31708f;
-  border-color: #31708f;
-}
-.list-group-item-warning {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-}
-a.list-group-item-warning,
-button.list-group-item-warning {
-  color: #8a6d3b;
-}
-a.list-group-item-warning .list-group-item-heading,
-button.list-group-item-warning .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-warning:hover,
-button.list-group-item-warning:hover,
-a.list-group-item-warning:focus,
-button.list-group-item-warning:focus {
-  color: #8a6d3b;
-  background-color: #faf2cc;
-}
-a.list-group-item-warning.active,
-button.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-button.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus,
-button.list-group-item-warning.active:focus {
-  color: #fff;
-  background-color: #8a6d3b;
-  border-color: #8a6d3b;
-}
-.list-group-item-danger {
-  color: #a94442;
-  background-color: #f2dede;
-}
-a.list-group-item-danger,
-button.list-group-item-danger {
-  color: #a94442;
-}
-a.list-group-item-danger .list-group-item-heading,
-button.list-group-item-danger .list-group-item-heading {
-  color: inherit;
-}
-a.list-group-item-danger:hover,
-button.list-group-item-danger:hover,
-a.list-group-item-danger:focus,
-button.list-group-item-danger:focus {
-  color: #a94442;
-  background-color: #ebcccc;
-}
-a.list-group-item-danger.active,
-button.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-button.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus,
-button.list-group-item-danger.active:focus {
-  color: #fff;
-  background-color: #a94442;
-  border-color: #a94442;
-}
-.list-group-item-heading {
-  margin-top: 0;
-  margin-bottom: 5px;
-}
-.list-group-item-text {
-  margin-bottom: 0;
-  line-height: 1.3;
-}
-.panel {
-  margin-bottom: 20px;
-  background-color: #fff;
-  border: 1px solid transparent;
-  border-radius: 4px;
-  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.panel-body {
-  padding: 15px;
-}
-.panel-heading {
-  padding: 10px 15px;
-  border-bottom: 1px solid transparent;
-  border-top-right-radius: 3px;
-  border-top-left-radius: 3px;
-}
-.panel-heading > .dropdown .dropdown-toggle {
-  color: inherit;
-}
-.panel-title {
-  margin-top: 0;
-  margin-bottom: 0;
-  font-size: 16px;
-  color: inherit;
-}
-.panel-title > a,
-.panel-title > small,
-.panel-title > .small,
-.panel-title > small > a,
-.panel-title > .small > a {
-  color: inherit;
-}
-.panel-footer {
-  padding: 10px 15px;
-  background-color: #f5f5f5;
-  border-top: 1px solid #ddd;
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.panel > .list-group,
-.panel > .panel-collapse > .list-group {
-  margin-bottom: 0;
-}
-.panel > .list-group .list-group-item,
-.panel > .panel-collapse > .list-group .list-group-item {
-  border-width: 1px 0;
-  border-radius: 0;
-}
-.panel > .list-group:first-child .list-group-item:first-child,
-.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
-  border-top: 0;
-  border-top-right-radius: 3px;
-  border-top-left-radius: 3px;
-}
-.panel > .list-group:last-child .list-group-item:last-child,
-.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
-  border-bottom: 0;
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
-  border-top-right-radius: 0;
-  border-top-left-radius: 0;
-}
-.panel-heading + .list-group .list-group-item:first-child {
-  border-top-width: 0;
-}
-.list-group + .panel-footer {
-  border-top-width: 0;
-}
-.panel > .table,
-.panel > .table-responsive > .table,
-.panel > .panel-collapse > .table {
-  margin-bottom: 0;
-}
-.panel > .table caption,
-.panel > .table-responsive > .table caption,
-.panel > .panel-collapse > .table caption {
-  padding-left: 15px;
-  padding-right: 15px;
-}
-.panel > .table:first-child,
-.panel > .table-responsive:first-child > .table:first-child {
-  border-top-right-radius: 3px;
-  border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
-  border-top-left-radius: 3px;
-  border-top-right-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
-  border-top-left-radius: 3px;
-}
-.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
-.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
-.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
-.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
-  border-top-right-radius: 3px;
-}
-.panel > .table:last-child,
-.panel > .table-responsive:last-child > .table:last-child {
-  border-bottom-right-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
-  border-bottom-left-radius: 3px;
-  border-bottom-right-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
-  border-bottom-left-radius: 3px;
-}
-.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
-.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
-.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
-.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
-  border-bottom-right-radius: 3px;
-}
-.panel > .panel-body + .table,
-.panel > .panel-body + .table-responsive,
-.panel > .table + .panel-body,
-.panel > .table-responsive + .panel-body {
-  border-top: 1px solid #ddd;
-}
-.panel > .table > tbody:first-child > tr:first-child th,
-.panel > .table > tbody:first-child > tr:first-child td {
-  border-top: 0;
-}
-.panel > .table-bordered,
-.panel > .table-responsive > .table-bordered {
-  border: 0;
-}
-.panel > .table-bordered > thead > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
-.panel > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
-.panel > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
-.panel > .table-bordered > thead > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
-.panel > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
-.panel > .table-bordered > tfoot > tr > td:first-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
-  border-left: 0;
-}
-.panel > .table-bordered > thead > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
-.panel > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
-.panel > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
-.panel > .table-bordered > thead > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
-.panel > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
-.panel > .table-bordered > tfoot > tr > td:last-child,
-.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
-  border-right: 0;
-}
-.panel > .table-bordered > thead > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
-.panel > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
-.panel > .table-bordered > thead > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
-.panel > .table-bordered > tbody > tr:first-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
-  border-bottom: 0;
-}
-.panel > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
-.panel > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
-.panel > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
-.panel > .table-bordered > tfoot > tr:last-child > th,
-.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
-  border-bottom: 0;
-}
-.panel > .table-responsive {
-  border: 0;
-  margin-bottom: 0;
-}
-.panel-group {
-  margin-bottom: 20px;
-}
-.panel-group .panel {
-  margin-bottom: 0;
-  border-radius: 4px;
-}
-.panel-group .panel + .panel {
-  margin-top: 5px;
-}
-.panel-group .panel-heading {
-  border-bottom: 0;
-}
-.panel-group .panel-heading + .panel-collapse > .panel-body,
-.panel-group .panel-heading + .panel-collapse > .list-group {
-  border-top: 1px solid #ddd;
-}
-.panel-group .panel-footer {
-  border-top: 0;
-}
-.panel-group .panel-footer + .panel-collapse .panel-body {
-  border-bottom: 1px solid #ddd;
-}
-.panel-default {
-  border-color: #ddd;
-}
-.panel-default > .panel-heading {
-  color: #333333;
-  background-color: #f5f5f5;
-  border-color: #ddd;
-}
-.panel-default > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #ddd;
-}
-.panel-default > .panel-heading .badge {
-  color: #f5f5f5;
-  background-color: #333333;
-}
-.panel-default > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #ddd;
-}
-.panel-primary {
-  border-color: #337ab7;
-}
-.panel-primary > .panel-heading {
-  color: #fff;
-  background-color: #337ab7;
-  border-color: #337ab7;
-}
-.panel-primary > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #337ab7;
-}
-.panel-primary > .panel-heading .badge {
-  color: #337ab7;
-  background-color: #fff;
-}
-.panel-primary > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #337ab7;
-}
-.panel-success {
-  border-color: #d6e9c6;
-}
-.panel-success > .panel-heading {
-  color: #3c763d;
-  background-color: #dff0d8;
-  border-color: #d6e9c6;
-}
-.panel-success > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #d6e9c6;
-}
-.panel-success > .panel-heading .badge {
-  color: #dff0d8;
-  background-color: #3c763d;
-}
-.panel-success > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #d6e9c6;
-}
-.panel-info {
-  border-color: #bce8f1;
-}
-.panel-info > .panel-heading {
-  color: #31708f;
-  background-color: #d9edf7;
-  border-color: #bce8f1;
-}
-.panel-info > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #bce8f1;
-}
-.panel-info > .panel-heading .badge {
-  color: #d9edf7;
-  background-color: #31708f;
-}
-.panel-info > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #bce8f1;
-}
-.panel-warning {
-  border-color: #faebcc;
-}
-.panel-warning > .panel-heading {
-  color: #8a6d3b;
-  background-color: #fcf8e3;
-  border-color: #faebcc;
-}
-.panel-warning > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #faebcc;
-}
-.panel-warning > .panel-heading .badge {
-  color: #fcf8e3;
-  background-color: #8a6d3b;
-}
-.panel-warning > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #faebcc;
-}
-.panel-danger {
-  border-color: #ebccd1;
-}
-.panel-danger > .panel-heading {
-  color: #a94442;
-  background-color: #f2dede;
-  border-color: #ebccd1;
-}
-.panel-danger > .panel-heading + .panel-collapse > .panel-body {
-  border-top-color: #ebccd1;
-}
-.panel-danger > .panel-heading .badge {
-  color: #f2dede;
-  background-color: #a94442;
-}
-.panel-danger > .panel-footer + .panel-collapse > .panel-body {
-  border-bottom-color: #ebccd1;
-}
-.well {
-  min-height: 20px;
-  padding: 19px;
-  margin-bottom: 20px;
-  background-color: #f5f5f5;
-  border: 1px solid #e3e3e3;
-  border-radius: 4px;
-  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-.well blockquote {
-  border-color: #ddd;
-  border-color: rgba(0, 0, 0, 0.15);
-}
-.well-lg {
-  padding: 24px;
-  border-radius: 6px;
-}
-.well-sm {
-  padding: 9px;
-  border-radius: 3px;
-}
-.close {
-  float: right;
-  font-size: 21px;
-  font-weight: bold;
-  line-height: 1;
-  color: #000;
-  text-shadow: 0 1px 0 #fff;
-  opacity: 0.2;
-  filter: alpha(opacity=20);
-}
-.close:hover,
-.close:focus {
-  color: #000;
-  text-decoration: none;
-  cursor: pointer;
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-}
-button.close {
-  padding: 0;
-  cursor: pointer;
-  background: transparent;
-  border: 0;
-  -webkit-appearance: none;
-}
-.modal-open {
-  overflow: hidden;
-}
-.modal {
-  display: none;
-  overflow: hidden;
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1050;
-  -webkit-overflow-scrolling: touch;
-  outline: 0;
-}
-.modal.fade .modal-dialog {
-  -webkit-transform: translate(0, -25%);
-  -ms-transform: translate(0, -25%);
-  -o-transform: translate(0, -25%);
-  transform: translate(0, -25%);
-  -webkit-transition: -webkit-transform 0.3s ease-out;
-  -moz-transition: -moz-transform 0.3s ease-out;
-  -o-transition: -o-transform 0.3s ease-out;
-  transition: transform 0.3s ease-out;
-}
-.modal.in .modal-dialog {
-  -webkit-transform: translate(0, 0);
-  -ms-transform: translate(0, 0);
-  -o-transform: translate(0, 0);
-  transform: translate(0, 0);
-}
-.modal-open .modal {
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-.modal-dialog {
-  position: relative;
-  width: auto;
-  margin: 10px;
-}
-.modal-content {
-  position: relative;
-  background-color: #fff;
-  border: 1px solid #999;
-  border: 1px solid rgba(0, 0, 0, 0.2);
-  border-radius: 6px;
-  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
-  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
-  background-clip: padding-box;
-  outline: 0;
-}
-.modal-backdrop {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 1040;
-  background-color: #000;
-}
-.modal-backdrop.fade {
-  opacity: 0;
-  filter: alpha(opacity=0);
-}
-.modal-backdrop.in {
-  opacity: 0.5;
-  filter: alpha(opacity=50);
-}
-.modal-header {
-  padding: 15px;
-  border-bottom: 1px solid #e5e5e5;
-}
-.modal-header .close {
-  margin-top: -2px;
-}
-.modal-title {
-  margin: 0;
-  line-height: 1.42857143;
-}
-.modal-body {
-  position: relative;
-  padding: 15px;
-}
-.modal-footer {
-  padding: 15px;
-  text-align: right;
-  border-top: 1px solid #e5e5e5;
-}
-.modal-footer .btn + .btn {
-  margin-left: 5px;
-  margin-bottom: 0;
-}
-.modal-footer .btn-group .btn + .btn {
-  margin-left: -1px;
-}
-.modal-footer .btn-block + .btn-block {
-  margin-left: 0;
-}
-.modal-scrollbar-measure {
-  position: absolute;
-  top: -9999px;
-  width: 50px;
-  height: 50px;
-  overflow: scroll;
-}
-@media (min-width: 768px) {
-  .modal-dialog {
-    width: 600px;
-    margin: 30px auto;
-  }
-  .modal-content {
-    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
-    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
-  }
-  .modal-sm {
-    width: 300px;
-  }
-}
-@media (min-width: 992px) {
-  .modal-lg {
-    width: 900px;
-  }
-}
-.clearfix:before,
-.clearfix:after,
-.dl-horizontal dd:before,
-.dl-horizontal dd:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:before,
-.btn-group-vertical > .btn-group:after,
-.panel-body:before,
-.panel-body:after,
-.modal-header:before,
-.modal-header:after,
-.modal-footer:before,
-.modal-footer:after {
-  content: " ";
-  display: table;
-}
-.clearfix:after,
-.dl-horizontal dd:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.btn-toolbar:after,
-.btn-group-vertical > .btn-group:after,
-.panel-body:after,
-.modal-header:after,
-.modal-footer:after {
-  clear: both;
-}
-.center-block {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-.pull-right {
-  float: right !important;
-}
-.pull-left {
-  float: left !important;
-}
-.hide {
-  display: none !important;
-}
-.show {
-  display: block !important;
-}
-.invisible {
-  visibility: hidden;
-}
-.text-hide {
-  font: 0/0 a;
-  color: transparent;
-  text-shadow: none;
-  background-color: transparent;
-  border: 0;
-}
-.hidden {
-  display: none !important;
-}
-.affix {
-  position: fixed;
-}
-@-ms-viewport {
-  width: device-width;
-}
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
-  display: none !important;
-}
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
-  display: none !important;
-}
-@media (max-width: 767px) {
-  .visible-xs {
-    display: block !important;
-  }
-  table.visible-xs {
-    display: table !important;
-  }
-  tr.visible-xs {
-    display: table-row !important;
-  }
-  th.visible-xs,
-  td.visible-xs {
-    display: table-cell !important;
-  }
-}
-@media (max-width: 767px) {
-  .visible-xs-block {
-    display: block !important;
-  }
-}
-@media (max-width: 767px) {
-  .visible-xs-inline {
-    display: inline !important;
-  }
-}
-@media (max-width: 767px) {
-  .visible-xs-inline-block {
-    display: inline-block !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm {
-    display: block !important;
-  }
-  table.visible-sm {
-    display: table !important;
-  }
-  tr.visible-sm {
-    display: table-row !important;
-  }
-  th.visible-sm,
-  td.visible-sm {
-    display: table-cell !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-block {
-    display: block !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-inline {
-    display: inline !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .visible-sm-inline-block {
-    display: inline-block !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md {
-    display: block !important;
-  }
-  table.visible-md {
-    display: table !important;
-  }
-  tr.visible-md {
-    display: table-row !important;
-  }
-  th.visible-md,
-  td.visible-md {
-    display: table-cell !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-block {
-    display: block !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-inline {
-    display: inline !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .visible-md-inline-block {
-    display: inline-block !important;
-  }
-}
-@media (min-width: 1200px) {
-  .visible-lg {
-    display: block !important;
-  }
-  table.visible-lg {
-    display: table !important;
-  }
-  tr.visible-lg {
-    display: table-row !important;
-  }
-  th.visible-lg,
-  td.visible-lg {
-    display: table-cell !important;
-  }
-}
-@media (min-width: 1200px) {
-  .visible-lg-block {
-    display: block !important;
-  }
-}
-@media (min-width: 1200px) {
-  .visible-lg-inline {
-    display: inline !important;
-  }
-}
-@media (min-width: 1200px) {
-  .visible-lg-inline-block {
-    display: inline-block !important;
-  }
-}
-@media (max-width: 767px) {
-  .hidden-xs {
-    display: none !important;
-  }
-}
-@media (min-width: 768px) and (max-width: 991px) {
-  .hidden-sm {
-    display: none !important;
-  }
-}
-@media (min-width: 992px) and (max-width: 1199px) {
-  .hidden-md {
-    display: none !important;
-  }
-}
-@media (min-width: 1200px) {
-  .hidden-lg {
-    display: none !important;
-  }
-}
-.visible-print {
-  display: none !important;
-}
-@media print {
-  .visible-print {
-    display: block !important;
-  }
-  table.visible-print {
-    display: table !important;
-  }
-  tr.visible-print {
-    display: table-row !important;
-  }
-  th.visible-print,
-  td.visible-print {
-    display: table-cell !important;
-  }
-}
-.visible-print-block {
-  display: none !important;
-}
-@media print {
-  .visible-print-block {
-    display: block !important;
-  }
-}
-.visible-print-inline {
-  display: none !important;
-}
-@media print {
-  .visible-print-inline {
-    display: inline !important;
-  }
-}
-.visible-print-inline-block {
-  display: none !important;
-}
-@media print {
-  .visible-print-inline-block {
-    display: inline-block !important;
-  }
-}
-@media print {
-  .hidden-print {
-    display: none !important;
-  }
-}
-.auth-message {
-  background-color: #eeeeee;
-  padding: 20px 0px;
-  width: 100%;
-  position: fixed;
-  top: -100%;
-  left: 0px;
-  z-index: 1070;
-  transition: top 300ms ease;
-}
-.auth-message.show {
-  top: 0px;
-  bottom: auto;
-}
-.auth-message p {
-  padding: 5px 0px;
-  color: #222222;
-}
-@media screen and (max-width: 991px) {
-  .auth-message {
-    text-align: center;
-  }
-  .auth-message .btn {
-    padding: 10px 16px;
-    font-size: 18px;
-  }
-}
-.alerts-snackbar {
-  position: fixed;
-  top: -100%;
-  width: 100%;
-  z-index: 1060;
-  text-align: center;
-  font-size: 18px;
-  transition: top 300ms ease;
-  pointer-events: none;
-}
-.alerts-snackbar.in {
-  top: 0px;
-  transition: top 200ms ease;
-}
-.alerts-snackbar p {
-  display: inline-block;
-  border-radius: 0px 0px 4px 4px;
-  margin: 0px;
-  pointer-events: all;
-}
-.loader {
-  width: 100%;
-  height: 49px;
-  text-align: center;
-}
-.loader.loader-spaced {
-  margin: 40px 0px;
-}
-.loader-spinning-wheel {
-  width: 49px;
-  height: 49px;
-  margin: 0 auto;
-  border: 3px solid #777777;
-  border-radius: 50%;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  animation: cssload-spin 575ms infinite linear;
-  -o-animation: cssload-spin 575ms infinite linear;
-  -ms-animation: cssload-spin 575ms infinite linear;
-  -webkit-animation: cssload-spin 575ms infinite linear;
-  -moz-animation: cssload-spin 575ms infinite linear;
-}
-@keyframes cssload-spin {
-  100% {
-    transform: rotate(360deg);
-  }
-}
-@-o-keyframes cssload-spin {
-  100% {
-    -o-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-ms-keyframes cssload-spin {
-  100% {
-    -ms-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-webkit-keyframes cssload-spin {
-  100% {
-    -webkit-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-@-moz-keyframes cssload-spin {
-  100% {
-    -moz-transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-.navbar {
-  margin-bottom: 0px;
-}
-.navbar .navbar-full .navbar-brand > * {
-  display: inline-block;
-}
-.navbar .navbar-full .navbar-brand img {
-  height: 16px;
-}
-.navbar .navbar-full .nav-guest,
-.navbar .navbar-full .nav-user {
-  float: right;
-}
-.navbar .navbar-full .nav-guest .navbar-btn,
-.navbar .navbar-full .nav-user .navbar-btn {
-  margin-left: 15px;
-}
-.navbar .navbar-full .nav-user .dropdown-toggle {
-  padding: 8px;
-}
-.navbar .navbar-full .nav-user .dropdown-toggle img {
-  width: 34px;
-  height: 34px;
-}
-.navbar ul.navbar-compact-nav {
-  margin: 0px;
-  display: table;
-  width: 100%;
-}
-.navbar ul.navbar-compact-nav > li {
-  display: table-cell;
-}
-.navbar ul.navbar-compact-nav > li > a,
-.navbar ul.navbar-compact-nav > li > button {
-  background: none;
-  border: none;
-  margin: 0px;
-  padding-top: 10px;
-  padding-bottom: 10px;
-  width: 100%;
-  color: #777;
-  text-align: center;
-}
-.navbar ul.navbar-compact-nav > li > a:hover,
-.navbar ul.navbar-compact-nav > li > button:hover,
-.navbar ul.navbar-compact-nav > li > a:focus,
-.navbar ul.navbar-compact-nav > li > button:focus {
-  color: #333;
-  background-color: transparent;
-}
-.navbar ul.navbar-compact-nav > li > a > img,
-.navbar ul.navbar-compact-nav > li > button > img {
-  width: 24px;
-  height: 24px;
-}
-.navbar ul.navbar-compact-nav > li > button {
-  padding-top: 10px;
-  padding-bottom: 10px;
-}
-.navbar ul.navbar-compact-nav > li > a > .material-icon {
-  font-size: 24px;
-  line-height: 24px;
-}
-@media (max-width: 767px) {
-  .navbar.navbar-misago {
-    min-height: auto;
-  }
-}
-.nav-side > a > .material-icon {
-  margin: -5px;
-  margin-right: 10px;
-  position: relative;
-  bottom: 2px;
-  width: 24px;
-  height: 24px;
-  font-size: 24px;
-  line-height: 24px;
-}
-@font-face {
-  font-family: 'Material Icons';
-  font-style: normal;
-  font-weight: 400;
-  src: url(../fonts/MaterialIcons-Regular.eot);
-  /* For IE6-8 */
-  src: local('Material Icons'), local('MaterialIcons-Regular'), url(../fonts/MaterialIcons-Regular.woff2) format('woff2'), url(../fonts/MaterialIcons-Regular.woff) format('woff'), url(../fonts/MaterialIcons-Regular.ttf) format('truetype');
-}
-.material-icon {
-  font-family: 'Material Icons';
-  font-weight: normal;
-  font-style: normal;
-  display: inline-block;
-  width: 1em;
-  height: 1em;
-  line-height: 1;
-  text-align: center;
-  text-transform: none;
-  letter-spacing: normal;
-  vertical-align: middle;
-  /* Support for all WebKit browsers. */
-  -webkit-font-smoothing: antialiased;
-  /* Support for Safari and Chrome. */
-  text-rendering: optimizeLegibility;
-  /* Support for Firefox. */
-  -moz-osx-font-smoothing: grayscale;
-  /* Support for IE. */
-  font-feature-settings: 'liga';
-}
-@media screen and (max-width: 991px) {
-  .modal-message {
-    text-align: center;
-  }
-  .modal-message .message-icon {
-    margin: 30px;
-  }
-  .modal-message .message-icon .material-icon {
-    font-size: 160px;
-  }
-}
-@media screen and (min-width: 992px) {
-  .modal-message .modal-body {
-    padding-top: 20px;
-    padding-bottom: 30px;
-  }
-  .modal-message .message-icon {
-    float: left;
-  }
-  .modal-message .message-icon .material-icon {
-    font-size: 50px;
-  }
-  .modal-message .message-body {
-    margin-left: 75px;
-    margin-top: 10px;
-  }
-  .modal-message .message-body .lead {
-    margin-bottom: 0px;
-  }
-}
-.modal-loader {
-  padding: 50px 0px;
-}
-.modal-loader .loader {
-  width: 100%;
-  height: 80px;
-  text-align: center;
-}
-.modal-loader .loader-spinning-wheel {
-  width: 80px;
-  height: 80px;
-}
-.modal-register .modal-footer a {
-  float: left;
-  margin-top: 6.66666667px;
-}
-@media screen and (max-width: 991px) {
-  .modal-register .modal-footer {
-    text-align: center;
-  }
-  .modal-register .modal-footer a {
-    display: block;
-  }
-  .modal-register .modal-footer .btn {
-    display: block;
-    float: none;
-    margin-top: 10px;
-    width: 100%;
-  }
-}
-.has-feedback .material-icon.form-control-feedback {
-  top: 6px;
-  right: 24px;
-  font-size: 1.42857143;
-  line-height: 1.42857143;
-}
-.well.well-form.well-done {
-  font-size: 18px;
-  text-align: center;
-}
-.well.well-form.well-done .message-icon {
-  margin-bottom: 10px;
-  font-size: 90px;
-  line-height: 90px;
-}
-.well.well-form.well-done .message-body {
-  margin-bottom: 6.66666667px;
-}
-.well.well-form.well-noscript {
-  font-size: 18px;
-  text-align: center;
-}
-.well.well-form.well-noscript .message-icon {
-  margin-bottom: 10px;
-  font-size: 90px;
-  line-height: 90px;
-}
-.btn.btn-yes-no,
-.btn.btn-select {
-  background: transparent;
-  border: 1px solid #eeeeee;
-}
-.btn.btn-yes-no .material-icon,
-.btn.btn-select .material-icon {
-  margin: -4px 0px;
-  margin-right: 8px;
-  position: relative;
-  bottom: 1px;
-  width: 20px;
-  height: 20px;
-  font-size: 20px;
-  line-height: 20px;
-}
-input.hidden-file-upload {
-  position: absolute;
-  top: -9999px;
-  left: -9999px;
-}
-.btn.btn-loading,
-.btn.btn-loading:link,
-.btn.btn-loading:active,
-.btn.btn-loading:visited,
-.btn.btn-loading:hover,
-.btn.btn-loading:focus {
-  color: transparent;
-}
-.btn.btn-loading .loader,
-.btn.btn-loading:link .loader,
-.btn.btn-loading:active .loader,
-.btn.btn-loading:visited .loader,
-.btn.btn-loading:hover .loader,
-.btn.btn-loading:focus .loader {
-  height: 20px;
-  margin-top: -20px;
-}
-.btn.btn-loading .loader > div,
-.btn.btn-loading:link .loader > div,
-.btn.btn-loading:active .loader > div,
-.btn.btn-loading:visited .loader > div,
-.btn.btn-loading:hover .loader > div,
-.btn.btn-loading:focus .loader > div {
-  width: 20px;
-  height: 20px;
-}
-.btn.btn-loading.btn-default .loader > div {
-  border-top-color: #333;
-  border-bottom-color: #333;
-}
-.btn.btn-loading.btn-primary .loader > div {
-  border-top-color: #fff;
-  border-bottom-color: #fff;
-}
-.btn.btn-loading.btn-success .loader > div {
-  border-top-color: #fff;
-  border-bottom-color: #fff;
-}
-.btn.btn-loading.btn-info .loader > div {
-  border-top-color: #fff;
-  border-bottom-color: #fff;
-}
-.btn.btn-loading.btn-warning .loader > div {
-  border-top-color: #fff;
-  border-bottom-color: #fff;
-}
-.btn.btn-loading.btn-danger .loader > div {
-  border-top-color: #fff;
-  border-bottom-color: #fff;
-}
-.dropdown-menu > li > a,
-.dropdown-menu > li > .btn-link {
-  display: block;
-  border: none;
-  clear: both;
-  float: none;
-  padding: 4px 20px;
-  width: 100%;
-  color: #333333;
-  font-weight: normal;
-  line-height: 1.42857143;
-  text-align: left;
-  white-space: nowrap;
-}
-.dropdown-menu > li > a:hover,
-.dropdown-menu > li > .btn-link:hover,
-.dropdown-menu > li > a:focus,
-.dropdown-menu > li > .btn-link:focus {
-  background-color: #f5f5f5;
-  color: #262626;
-  text-decoration: none;
-}
-.dropdown-menu > li > a .material-icon,
-.dropdown-menu > li > .btn-link .material-icon {
-  margin: -2px 0px;
-  margin-right: 7px;
-  position: relative;
-  bottom: 1px;
-  font-size: 18px;
-}
-.dropdown-menu .dropdown-footer {
-  padding: 6px 20px;
-}
-.mobile-dropdown,
-.compact-nav {
-  position: static;
-  margin: 0px;
-  overflow: auto;
-}
-.mobile-dropdown.open,
-.compact-nav.open {
-  margin-top: -20px;
-  margin-bottom: 20px;
-}
-.mobile-dropdown.open > .dropdown-menu,
-.compact-nav.open > .dropdown-menu {
-  border: none;
-  border-radius: 0;
-  -webkit-box-shadow: none;
-  box-shadow: none;
-  display: block;
-  margin: 0px;
-  width: 100%;
-  position: static;
-}
-.user-dropdown .guest-preview {
-  text-align: center;
-}
-.user-dropdown .guest-preview .row {
-  margin: 0px;
-}
-.navbar .user-dropdown {
-  width: 240px;
-}
-.user-dropdown .dropdown-header {
-  padding: 6px 20px;
-  font-size: 18px;
-}
-.user-dropdown .dropdown-header strong {
-  font-weight: normal;
-}
-.page-header {
-  margin: 0px;
-  margin-bottom: 20px;
-}
-@media screen and (max-width: 991px) {
-  .container h1 {
-    font-size: 22.5px;
-  }
-  .container > .btn {
-    float: right;
-    margin-top: 13px;
-  }
-  .container > .btn-dropdown-toggle .material-icon {
-    width: 24px;
-    height: 24px;
-    font-size: 24px;
-    line-height: 24px;
-  }
-}
-.page-header.tabbed {
-  padding-bottom: 0px;
-}
-.page-header.tabbed .page-tabs .nav > li > a {
-  border-radius: 0px;
-}
-@media screen and (max-width: 991px) {
-  .panel-message-body {
-    text-align: center;
-  }
-  .panel-message-body .message-icon {
-    margin: 30px;
-  }
-  .panel-message-body .message-icon .material-icon {
-    font-size: 160px;
-  }
-}
-@media screen and (min-width: 992px) {
-  .panel-message-body {
-    padding: 20px;
-    padding-bottom: 30px;
-  }
-  .panel-message-body .message-icon {
-    float: left;
-  }
-  .panel-message-body .message-icon .material-icon {
-    font-size: 50px;
-  }
-  .panel-message-body .message-body {
-    margin-left: 75px;
-    margin-top: 10px;
-  }
-  .panel-message-body .message-body .lead {
-    margin-bottom: 0px;
-  }
-  .panel-message-body .message-body .help-block {
-    margin-top: 13.2px;
-  }
-}
-.panel-body-loading {
-  padding: 0px;
-  text-align: center;
-}
-.misago-footer {
-  margin-top: 30px;
-  margin-bottom: 50px;
-}
-.misago-footer .footer-content {
-  border-top: 1px solid #eeeeee;
-  padding-top: 30px;
-}
-.misago-footer .noscript-message .material-icon {
-  position: relative;
-  bottom: 1px;
-  font-size: 18px;
-}
-.ui-preview,
-.ui-preview-text,
-.ui-preview-img {
-  background: #fafafa;
-  border-radius: 5px;
-  color: #fafafa;
-  -webkit-animation: ui-preview-animation 1.5s linear infinite;
-  -o-animation: ui-preview-animation 1.5s linear infinite;
-  animation: ui-preview-animation 1.5s linear infinite;
-}
-@-webkit-keyframes ui-preview-animation {
-  0% {
-    background: #fafafa;
-    color: #fafafa;
-  }
-  50% {
-    background: #e0e0e0;
-    color: #e0e0e0;
-  }
-  100% {
-    background: #fafafa;
-    color: #fafafa;
-  }
-}
-@keyframes ui-preview-animation {
-  0% {
-    background: #fafafa;
-    color: #fafafa;
-  }
-  50% {
-    background: #e0e0e0;
-    color: #e0e0e0;
-  }
-  100% {
-    background: #fafafa;
-    color: #fafafa;
-  }
-}
-.ui-preview-text {
-  border-radius: 6px;
-  display: inline-block;
-  height: 14px;
-  position: relative;
-  top: 3px;
-}
-.ui-preview .list-group {
-  padding: 1px;
-}
-.ui-preview .list-group > li {
-  border: none;
-  margin-bottom: 1px;
-}
-.ui-preview .list-group > li:last-child {
-  margin-bottom: 0px;
-}
-.user-status > .status-icon.ui-preview {
-  display: inline-block;
-  border-radius: 100px;
-  width: 20px;
-  height: 20px;
-  font-weight: 0px;
-}
-.user-status > .status-label.ui-preview {
-  display: inline-block;
-  margin-left: 6px;
-  width: 40px;
-}
-.item-title {
-  color: #333333;
-  font-weight: bold;
-  text-decoration: none;
-}
-a.item-title:link,
-a.item-title:active,
-a.item-title:visited,
-a.item-title:hover {
-  color: #333333;
-  font-weight: bold;
-  text-decoration: underline;
-}
-.message-line {
-  text-align: center;
-}
-.message-line .material-icon {
-  margin-right: 6.66666667px;
-  font-size: 20px;
-  line-height: 20px;
-  height: 20px;
-  width: 20px;
-}
-.modal-change-avatar .modal-avatar-index .avatar-preview {
-  border-radius: 6px;
-  margin: 0px auto;
-  overflow: hidden;
-  position: relative;
-  width: 200px;
-  height: 200px;
-}
-.modal-change-avatar .modal-avatar-index .avatar-preview .loader {
-  display: none;
-  position: absolute;
-  top: 50px;
-  height: 100px;
-}
-.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {
-  border-width: 10px;
-  border-color: #fff;
-  border-left-color: transparent;
-  border-right-color: transparent;
-  width: 100px;
-  height: 100px;
-}
-.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img {
-  opacity: 0.33;
-  filter: alpha(opacity=33);
-}
-.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader {
-  display: block;
-}
-@media (max-width: 767px) {
-  .modal-change-avatar .modal-avatar-index .avatar-preview {
-    margin-bottom: 20px;
-    width: 150px;
-    height: 150px;
-  }
-  .modal-change-avatar .modal-avatar-index .avatar-preview img {
-    width: 150px;
-    height: 150px;
-  }
-  .modal-change-avatar .modal-avatar-index .avatar-preview .loader {
-    top: 25px;
-    height: 100px;
-  }
-  .modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {
-    width: 100px;
-    height: 100px;
-  }
-}
-.modal-change-avatar .modal-avatar-index .btn {
-  text-align: left;
-}
-.modal-change-avatar .modal-avatar-upload {
-  text-align: center;
-}
-.modal-change-avatar .modal-avatar-upload .btn-pick-file {
-  background: transparent;
-  border: 2px solid #eeeeee;
-  border-radius: 6px;
-  padding: 10px 24px;
-  -webkit-box-shadow: none;
-  box-shadow: none;
-  color: #777777;
-  font-size: 18px;
-  text-align: center;
-}
-.modal-change-avatar .modal-avatar-upload .btn-pick-file > .material-icon {
-  display: block;
-  margin: 0px auto;
-  margin-bottom: 13.2px;
-  font-size: 50px;
-  width: 50px;
-  height: 50px;
-}
-.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover,
-.modal-change-avatar .modal-avatar-upload .btn-pick-file:active {
-  border-color: #777777;
-}
-.modal-change-avatar .modal-avatar-upload .text-muted {
-  margin-top: 13.2px;
-}
-.modal-change-avatar .modal-avatar-upload .upload-progress img {
-  border-radius: 4px;
-  margin-bottom: 20px;
-  max-height: 80px;
-  width: auto;
-}
-.modal-change-avatar .modal-avatar-upload .upload-progress .progress {
-  width: 70%;
-  margin: 0px auto;
-}
-.modal-avatar-crop .crop-form {
-  margin: 0px auto;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input {
-  margin-top: 10px;
-  -webkit-appearance: none;
-  border: 1px solid white;
-  width: 100%;
-  /*hide the outline behind the border*/
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track {
-  width: 100%;
-  height: 8px;
-  background: #eeeeee;
-  border: none;
-  border-radius: 3px;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb {
-  -webkit-appearance: none;
-  border: none;
-  height: 20px;
-  width: 20px;
-  border-radius: 50%;
-  background: #777777;
-  margin-top: -6px;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus {
-  outline: none;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track {
-  background: #eeeeee;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track {
-  width: 100%;
-  height: 8px;
-  background: #eeeeee;
-  border: none;
-  border-radius: 4px;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb {
-  border: none;
-  height: 20px;
-  width: 20px;
-  border-radius: 50%;
-  background: #777777;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring {
-  outline: 1px solid white;
-  outline-offset: -1px;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track {
-  width: 100%;
-  height: 8px;
-  /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */
-  background: transparent;
-  /*leave room for the larger thumb to overflow with a transparent border */
-  border-color: transparent;
-  border-width: 8px 0;
-  /*remove default tick marks*/
-  color: transparent;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower {
-  background: #eeeeee;
-  border-radius: 16px;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper {
-  background: #eeeeee;
-  border-radius: 16px;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb {
-  border: none;
-  height: 20px;
-  width: 20px;
-  border-radius: 50%;
-  background: #777777;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower {
-  background: #eeeeee;
-}
-.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper {
-  background: #eeeeee;
-}
-.modal-change-avatar .modal-avatar-gallery {
-  padding-bottom: 0px;
-}
-.modal-change-avatar .modal-avatar-gallery .avatars-gallery {
-  margin-bottom: 20px;
-}
-.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3 {
-  margin-top: 0px;
-}
-.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row {
-  margin-bottom: 10px;
-}
-.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn {
-  border-radius: 6px;
-  border: 2px solid #eeeeee;
-  background: none;
-  padding: 2px;
-}
-.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover,
-.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus {
-  border-color: #777777;
-}
-.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,
-.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active {
-  border-color: #337ab7;
-}
-.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img {
-  border-radius: 4px;
-  width: 100%;
-}
-@media screen and (max-width: 991px) {
-  .page-message,
-  .page-error {
-    text-align: center;
-  }
-  .page-message .message-icon,
-  .page-error .message-icon {
-    margin: 30px;
-  }
-  .page-message .message-icon .material-icon,
-  .page-error .message-icon .material-icon {
-    font-size: 160px;
-  }
-}
-@media screen and (min-width: 992px) {
-  .page-message .message-panel,
-  .page-error .message-panel {
-    margin: 60px auto;
-    max-width: 779.35px;
-    overflow: auto;
-  }
-  .page-message .message-icon,
-  .page-error .message-icon {
-    float: left;
-  }
-  .page-message .message-icon .material-icon,
-  .page-error .message-icon .material-icon {
-    font-size: 80px;
-  }
-  .page-message .message-body,
-  .page-error .message-body {
-    margin-left: 100px;
-  }
-}
-.active-posters li {
-  display: block;
-  overflow: auto;
-}
-.active-posters .rank-user .rank-name,
-.active-posters .rank-user .user-title {
-  font-size: 12px;
-}
-.active-posters .rank-user .status-icon {
-  width: 18px;
-  height: 18px;
-  font-size: 18px;
-  line-height: 18px;
-}
-@media screen and (max-width: 991px) {
-  .active-posters .rank-user-avatar {
-    float: left;
-  }
-  .active-posters .rank-user {
-    float: left;
-    margin-left: 16px;
-    width: 40%;
-  }
-  .active-posters .rank-user .item-title {
-    margin-top: 4px;
-    font-size: 18px;
-  }
-  .active-posters .rank-user .user-status {
-    margin-right: 4px;
-  }
-  .active-posters .rank-user .user-status .status-icon {
-    position: relative;
-    top: 1px;
-  }
-  .active-posters .rank-position,
-  .active-posters .rank-posts-total,
-  .active-posters .rank-posts-counted {
-    font-size: 12px;
-  }
-  .active-posters .rank-position div,
-  .active-posters .rank-posts-total div,
-  .active-posters .rank-posts-counted div {
-    display: inline-block;
-  }
-  .active-posters .rank-position .stat-value,
-  .active-posters .rank-posts-total .stat-value,
-  .active-posters .rank-posts-counted .stat-value {
-    width: 34px;
-    padding-right: 4px;
-    text-align: right;
-  }
-}
-@media screen and (min-width: 992px) {
-  .active-posters li > * {
-    float: left;
-    padding-top: 4px;
-  }
-  .active-posters .rank-user-avatar {
-    padding-top: 0px;
-  }
-  .active-posters .rank-user {
-    padding-top: 0px;
-    padding-left: 16px;
-    width: 25%;
-  }
-  .active-posters .rank-user .item-title {
-    margin-top: 2px;
-    font-size: 18px;
-  }
-  .active-posters .rank-user .user-status {
-    margin-left: 16px;
-  }
-  .active-posters .rank-user .user-status .status-icon {
-    position: relative;
-    top: 2px;
-  }
-  .active-posters .rank-user .user-status .status-label {
-    font-size: 12px;
-    line-height: 12px;
-  }
-  .active-posters .rank-position {
-    width: 23%;
-  }
-  .active-posters .rank-posts-total {
-    width: 23%;
-  }
-  .active-posters .rank-posts-counted {
-    width: 23%;
-  }
-  .active-posters .rank-position,
-  .active-posters .rank-posts-total,
-  .active-posters .rank-posts-counted {
-    font-size: 18px;
-    font-weight: bold;
-    text-align: center;
-  }
-  .active-posters .rank-position .text-muted,
-  .active-posters .rank-posts-total .text-muted,
-  .active-posters .rank-posts-counted .text-muted {
-    font-size: 12px;
-    font-weight: normal;
-  }
-}
-.username-history .username-change-avatar {
-  float: left;
-}
-.username-history .username-change-avatar .user-avatar {
-  margin-right: 10px;
-}
-.username-history .username-change-avatar .user-avatar img {
-  width: 42px;
-  height: 42px;
-}
-.username-history .username-change .material-icon {
-  margin: 0px 7px;
-}
-.username-history .username-change-date {
-  color: #777777;
-  font-size: 12px;
-}
-@media screen and (min-width: 992px) {
-  .username-history li {
-    overflow: auto;
-  }
-  .username-history li.empty-message {
-    text-align: center;
-  }
-  .username-history .username-change-avatar {
-    float: left;
-  }
-  .username-history .username-change-avatar .user-avatar {
-    margin-right: 10px;
-  }
-  .username-history .username-change-avatar .user-avatar img {
-    width: 18px;
-    height: 18px;
-    position: relative;
-    bottom: 1px;
-  }
-  .username-history .username-change-author {
-    float: left;
-    width: 30%;
-  }
-  .username-history .username-change {
-    float: left;
-    width: 40%;
-  }
-  .username-history .username-change-date {
-    float: left;
-    width: 20%;
-  }
-  .username-history.ui-ready .username-change-date {
-    position: relative;
-    top: 2px;
-  }
-}
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */hr,img{border:0}body,figure{margin:0}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.img-thumbnail,.table,label{max-width:100%}.alerts-snackbar,.form-control-feedback,a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;height:auto}.dropdown-menu .divider,.nav .nav-divider,.sr-only{height:1px;overflow:hidden}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;margin:-1px;padding:0;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}dl,ol,ul{margin-top:0}.lead,address,dl{margin-bottom:20px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{font-size:16px;font-weight:300;line-height:1.4}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;border-bottom:1px solid #eee}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{font-style:normal}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.btn,.caret{vertical-align:middle}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}.media-object.img-thumbnail,.nav>li>a>img{max-width:none}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.form-group-sm .form-control,.input-sm{padding:5px 10px;border-radius:3px;font-size:12px}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle,.btn.active,.btn:active,.dropdown-toggle:focus,.modal,.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus,.modal-content,.navbar-toggle:focus,.open>a{outline:0}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.alert .alert-link,.close{font-weight:700}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block}.btn-block+.btn-block{margin-top:5px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.nav>li,.nav>li>a,.open>.dropdown-menu{display:block}.dropdown-menu .divider{margin:9px 0;background-color:#e5e5e5}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-header,.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.nav>li.disabled>a{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.nav>li,.nav>li>a,.navbar{position:relative}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{margin:9px 0;background-color:#e5e5e5}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{min-height:50px;border:1px solid transparent}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.progress-bar{float:left}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.progress-bar{width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal{display:none;position:fixed;left:0;z-index:1050;-webkit-overflow-scrolling:touch}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.alerts-snackbar,.auth-message{transition:top .3s ease;width:100%}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box}.modal-backdrop{position:fixed;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.affix,.auth-message{position:fixed}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.material-icon,.user-dropdown .dropdown-header strong{font-weight:400}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}.navbar.navbar-misago{min-height:auto}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.alerts-snackbar p,.navbar .navbar-full .navbar-brand>*{display:inline-block}.auth-message{background-color:#eee;padding:20px 0;top:-100%;left:0;z-index:1070}.auth-message.show{top:0;bottom:auto}.auth-message p{padding:5px 0;color:#222}@media screen and (max-width:991px){.auth-message{text-align:center}.auth-message .btn{padding:10px 16px;font-size:18px}}.alerts-snackbar{position:fixed;top:-100%;z-index:1060;text-align:center;font-size:18px}.nav-side>a>.material-icon,.navbar ul.navbar-compact-nav>li>a>.material-icon{font-size:24px;line-height:24px}.alerts-snackbar.in{top:0;transition:top .2s ease}.alerts-snackbar p{border-radius:0 0 4px 4px;margin:0;pointer-events:all}.loader{width:100%;height:49px;text-align:center}.loader.loader-spaced{margin:40px 0}.loader-spinning-wheel{width:49px;height:49px;margin:0 auto;border:3px solid #777;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:cssload-spin 575ms infinite linear;-o-animation:cssload-spin 575ms infinite linear;-ms-animation:cssload-spin 575ms infinite linear;-webkit-animation:cssload-spin 575ms infinite linear;-moz-animation:cssload-spin 575ms infinite linear}@keyframes cssload-spin{100%{transform:rotate(360deg)}}@-o-keyframes cssload-spin{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes cssload-spin{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes cssload-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes cssload-spin{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}.navbar{margin-bottom:0}.navbar .navbar-full .navbar-brand img{height:16px}.navbar .navbar-full .nav-guest,.navbar .navbar-full .nav-user{float:right}.navbar .navbar-full .nav-guest .navbar-btn,.navbar .navbar-full .nav-user .navbar-btn{margin-left:15px}.navbar .navbar-full .nav-user .dropdown-toggle{padding:8px}.navbar .navbar-full .nav-user .dropdown-toggle img{width:34px;height:34px}.navbar ul.navbar-compact-nav{margin:0;display:table;width:100%}.navbar ul.navbar-compact-nav>li{display:table-cell}.navbar ul.navbar-compact-nav>li>a,.navbar ul.navbar-compact-nav>li>button{background:0 0;border:none;margin:0;padding-top:10px;padding-bottom:10px;width:100%;color:#777;text-align:center}.navbar ul.navbar-compact-nav>li>a:focus,.navbar ul.navbar-compact-nav>li>a:hover,.navbar ul.navbar-compact-nav>li>button:focus,.navbar ul.navbar-compact-nav>li>button:hover{color:#333;background-color:transparent}.navbar ul.navbar-compact-nav>li>a>img,.navbar ul.navbar-compact-nav>li>button>img{width:24px;height:24px}.navbar ul.navbar-compact-nav>li>button{padding-top:10px;padding-bottom:10px}.nav-side>a>.material-icon{margin:-5px 10px -5px -5px;position:relative;bottom:2px;width:24px;height:24px}@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(../fonts/MaterialIcons-Regular.eot);src:local('Material Icons'),local('MaterialIcons-Regular'),url(../fonts/MaterialIcons-Regular.woff2) format('woff2'),url(../fonts/MaterialIcons-Regular.woff) format('woff'),url(../fonts/MaterialIcons-Regular.ttf) format('truetype')}.material-icon{font-family:'Material Icons';font-style:normal;display:inline-block;width:1em;height:1em;line-height:1;text-align:center;text-transform:none;letter-spacing:normal;vertical-align:middle;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga'}@media screen and (max-width:991px){.modal-message{text-align:center}.modal-message .message-icon{margin:30px}.modal-message .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.modal-message .modal-body{padding-top:20px;padding-bottom:30px}.modal-message .message-icon{float:left}.modal-message .message-icon .material-icon{font-size:50px}.modal-message .message-body{margin-left:75px;margin-top:10px}.modal-message .message-body .lead{margin-bottom:0}}.modal-loader{padding:50px 0}.modal-loader .loader{width:100%;height:80px;text-align:center}.modal-loader .loader-spinning-wheel{width:80px;height:80px}.modal-register .modal-footer a{float:left;margin-top:6.67px}@media screen and (max-width:991px){.modal-register .modal-footer{text-align:center}.modal-register .modal-footer a{display:block}.modal-register .modal-footer .btn{display:block;float:none;margin-top:10px;width:100%}}.has-feedback .material-icon.form-control-feedback{top:6px;right:24px;font-size:1.42857143;line-height:1.42857143}.well.well-form.well-done{font-size:18px;text-align:center}.well.well-form.well-done .message-icon{margin-bottom:10px;font-size:90px;line-height:90px}.well.well-form.well-done .message-body{margin-bottom:6.67px}.well.well-form.well-noscript{font-size:18px;text-align:center}.well.well-form.well-noscript .message-icon{margin-bottom:10px;font-size:90px;line-height:90px}.btn.btn-select,.btn.btn-yes-no{background:0 0;border:1px solid #eee}.btn.btn-select .material-icon,.btn.btn-yes-no .material-icon{margin:-4px 8px -4px 0;position:relative;bottom:1px;width:20px;height:20px;font-size:20px;line-height:20px}input.hidden-file-upload{position:absolute;top:-9999px;left:-9999px}.btn.btn-loading,.btn.btn-loading:active,.btn.btn-loading:focus,.btn.btn-loading:hover,.btn.btn-loading:link,.btn.btn-loading:visited{color:transparent}.btn.btn-loading .loader,.btn.btn-loading:active .loader,.btn.btn-loading:focus .loader,.btn.btn-loading:hover .loader,.btn.btn-loading:link .loader,.btn.btn-loading:visited .loader{height:20px;margin-top:-20px}.btn.btn-loading .loader>div,.btn.btn-loading:active .loader>div,.btn.btn-loading:focus .loader>div,.btn.btn-loading:hover .loader>div,.btn.btn-loading:link .loader>div,.btn.btn-loading:visited .loader>div{width:20px;height:20px}.btn.btn-loading.btn-default .loader>div{border-top-color:#333;border-bottom-color:#333}.btn.btn-loading.btn-danger .loader>div,.btn.btn-loading.btn-info .loader>div,.btn.btn-loading.btn-primary .loader>div,.btn.btn-loading.btn-success .loader>div,.btn.btn-loading.btn-warning .loader>div{border-top-color:#fff;border-bottom-color:#fff}.dropdown-menu>li>.btn-link,.dropdown-menu>li>a{display:block;border:none;clear:both;float:none;padding:4px 20px;width:100%;color:#333;font-weight:400;line-height:1.42857143;text-align:left;white-space:nowrap}.message-line,.user-dropdown .guest-preview{text-align:center}.dropdown-menu>li>.btn-link:focus,.dropdown-menu>li>.btn-link:hover,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#f5f5f5;color:#262626;text-decoration:none}.dropdown-menu>li>.btn-link .material-icon,.dropdown-menu>li>a .material-icon{margin:-2px 7px -2px 0;position:relative;bottom:1px;font-size:18px}.dropdown-menu .dropdown-footer{padding:6px 20px}.compact-nav,.mobile-dropdown{position:static;margin:0;overflow:auto}.compact-nav.open,.mobile-dropdown.open{margin-top:-20px;margin-bottom:20px}.compact-nav.open>.dropdown-menu,.mobile-dropdown.open>.dropdown-menu{border:none;border-radius:0;-webkit-box-shadow:none;box-shadow:none;display:block;margin:0;width:100%;position:static}.user-dropdown .guest-preview .row{margin:0}.navbar .user-dropdown{width:240px}.user-dropdown .dropdown-header{padding:6px 20px;font-size:18px}.page-header{margin:0 0 20px}@media screen and (max-width:991px){.container h1{font-size:22.5px}.container>.btn{float:right;margin-top:13px}.container>.btn-dropdown-toggle .material-icon{width:24px;height:24px;font-size:24px;line-height:24px}.panel-message-body{text-align:center}.panel-message-body .message-icon{margin:30px}.panel-message-body .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.page-header.tabbed{padding-bottom:0}.page-header.tabbed .page-tabs .nav>li>a{border-radius:0}.panel-message-body{padding:20px 20px 30px}.panel-message-body .message-icon{float:left}.panel-message-body .message-icon .material-icon{font-size:50px}.panel-message-body .message-body{margin-left:75px;margin-top:10px}.panel-message-body .message-body .lead{margin-bottom:0}.panel-message-body .message-body .help-block{margin-top:13.2px}}.panel-body-loading{padding:0;text-align:center}.misago-footer{margin-top:30px;margin-bottom:50px}.misago-footer .footer-content{border-top:1px solid #eee;padding-top:30px}.misago-footer .noscript-message .material-icon{position:relative;bottom:1px;font-size:18px}.ui-preview,.ui-preview-img,.ui-preview-text{background:#fafafa;border-radius:5px;color:#fafafa;-webkit-animation:ui-preview-animation 1.5s linear infinite;-o-animation:ui-preview-animation 1.5s linear infinite;animation:ui-preview-animation 1.5s linear infinite}@-webkit-keyframes ui-preview-animation{0%,100%{background:#fafafa;color:#fafafa}50%{background:#e0e0e0;color:#e0e0e0}}@keyframes ui-preview-animation{0%,100%{background:#fafafa;color:#fafafa}50%{background:#e0e0e0;color:#e0e0e0}}.ui-preview-text{border-radius:6px;display:inline-block;height:14px;position:relative;top:3px}.ui-preview-paragraph .ui-preview-text{margin-right:6px}.ui-preview-paragraph .ui-preview-text:last-child{margin-right:0}.ui-preview .list-group{padding:1px}.ui-preview .list-group>li{border:none;margin-bottom:1px}.ui-preview .list-group>li:last-child{margin-bottom:0}.user-status.user-banned .status-icon{color:#d9534f}.user-status.user-online .status-icon{color:#5cb85c}.user-status.user-offline .status-icon{color:#eee}.user-status>.status-icon.ui-preview{display:inline-block;border-radius:100px;width:20px;height:20px;font-weight:0}.user-status>.status-label.ui-preview{display:inline-block;margin-left:6px;width:40px}.item-title{color:#333;font-weight:700;text-decoration:none}a.item-title:active,a.item-title:hover,a.item-title:link,a.item-title:visited{color:#333;font-weight:700;text-decoration:underline}.message-line .material-icon{margin-right:6.67px;font-size:20px;line-height:20px;height:20px;width:20px}.modal-change-avatar .modal-avatar-index .avatar-preview{border-radius:6px;margin:0 auto;overflow:hidden;position:relative;width:200px;height:200px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{display:none;position:absolute;top:50px;height:100px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{border-width:10px;border-color:#fff transparent;width:100px;height:100px}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img{opacity:.33;filter:alpha(opacity=33)}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader{display:block}@media (max-width:767px){.modal-change-avatar .modal-avatar-index .avatar-preview{margin-bottom:20px;width:150px;height:150px}.modal-change-avatar .modal-avatar-index .avatar-preview img{width:150px;height:150px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{top:25px;height:100px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{width:100px;height:100px}}.modal-change-avatar .modal-avatar-index .btn{text-align:left}.modal-change-avatar .modal-avatar-upload{text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file{background:0 0;border:2px solid #eee;border-radius:6px;padding:10px 24px;-webkit-box-shadow:none;box-shadow:none;color:#777;font-size:18px;text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file>.material-icon{display:block;margin:0 auto 13.2px;font-size:50px;width:50px;height:50px}.modal-change-avatar .modal-avatar-upload .btn-pick-file:active,.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover{border-color:#777}.modal-change-avatar .modal-avatar-upload .text-muted{margin-top:13.2px}.modal-change-avatar .modal-avatar-upload .upload-progress img{border-radius:4px;margin-bottom:20px;max-height:80px;width:auto}.modal-change-avatar .modal-avatar-upload .upload-progress .progress{width:70%;margin:0 auto}.modal-avatar-crop .crop-form{margin:0 auto}.modal-avatar-crop .crop-form .cropit-image-zoom-input{margin-top:10px;-webkit-appearance:none;border:1px solid #fff;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track{width:100%;height:8px;background:#eee;border:none;border-radius:3px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:20px;width:20px;border-radius:50%;background:#777;margin-top:-6px}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track{background:#eee}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track{width:100%;height:8px;background:#eee;border:none;border-radius:4px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb{border:none;height:20px;width:20px;border-radius:50%;background:#777}.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring{outline:#fff solid 1px;outline-offset:-1px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track{width:100%;height:8px;background:0 0;border-color:transparent;border-width:8px 0;color:transparent}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower{background:#eee;border-radius:16px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper{background:#eee;border-radius:16px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb{border:none;height:20px;width:20px;border-radius:50%;background:#777}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower{background:#eee}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper{background:#eee}.modal-change-avatar .modal-avatar-gallery{padding-bottom:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery{margin-bottom:20px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3{margin-top:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row{margin-bottom:10px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn{border-radius:6px;border:2px solid #eee;background:0 0;padding:2px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover{border-color:#777}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active{border-color:#337ab7}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img{border-radius:4px;width:100%}@media screen and (max-width:991px){.page-error,.page-message{text-align:center}.page-error .message-icon,.page-message .message-icon{margin:30px}.page-error .message-icon .material-icon,.page-message .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.page-error .message-panel,.page-message .message-panel{margin:60px auto;max-width:779.35px;overflow:auto}.page-error .message-icon,.page-message .message-icon{float:left}.page-error .message-icon .material-icon,.page-message .message-icon .material-icon{font-size:80px}.page-error .message-body,.page-message .message-body{margin-left:100px}}.active-posters li{display:block;overflow:auto}.active-posters .rank-user .rank-name,.active-posters .rank-user .user-title{font-size:12px}.active-posters .rank-user .status-icon{width:18px;height:18px;margin-right:2px;font-size:18px;line-height:18px}@media screen and (max-width:991px){.active-posters.ui-preview .rank-position .stat-value,.active-posters.ui-preview .rank-posts-counted .stat-value,.active-posters.ui-preview .rank-posts-total .stat-value,.active-posters.ui-preview .rank-user .rank-name{position:relative;bottom:1px}.active-posters.ui-preview .rank-position .stat-value .ui-preview-text,.active-posters.ui-preview .rank-posts-counted .stat-value .ui-preview-text,.active-posters.ui-preview .rank-posts-total .stat-value .ui-preview-text,.active-posters.ui-preview .rank-user .rank-name .ui-preview-text{height:12px}.active-posters .rank-user-avatar{float:left}.active-posters .rank-user{float:left;margin-left:16px;width:40%}.active-posters .rank-user .item-title{margin-top:4px;font-size:18px}.active-posters .rank-user .user-status{margin-right:4px}.active-posters .rank-user .user-status .status-icon{position:relative;top:-1px}.active-posters .rank-user .user-status .status-icon.ui-preview{position:relative;top:1px}.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{font-size:12px}.active-posters .rank-position div,.active-posters .rank-posts-counted div,.active-posters .rank-posts-total div{display:inline-block}.active-posters .rank-position .stat-value,.active-posters .rank-posts-counted .stat-value,.active-posters .rank-posts-total .stat-value{width:34px;padding-right:4px;text-align:right}}@media screen and (min-width:992px){.active-posters .rank-user .rank-name,.active-posters .rank-user .user-status{margin-right:12px}.active-posters.ui-preview .rank-user .user-status .status-icon{position:relative;top:2px}.active-posters li>*{float:left;padding-top:4px}.active-posters .rank-user-avatar{padding-top:0}.active-posters .rank-user{padding-top:0;padding-left:16px;width:25%}.active-posters .rank-user .item-title{margin-top:2px;font-size:18px}.active-posters .rank-user .user-status .status-icon{position:relative;top:-1px}.active-posters .rank-user .user-status .status-icon.ui-preview{top:2px}.active-posters .rank-user .user-status .status-label{font-size:12px;line-height:12px}.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{width:23%;font-size:18px;font-weight:700;text-align:center}.active-posters .rank-position .text-muted,.active-posters .rank-posts-counted .text-muted,.active-posters .rank-posts-total .text-muted{font-size:12px;font-weight:400}}.username-history .username-change-avatar{float:left}.username-history .username-change-avatar .user-avatar{margin-right:10px}.username-history .username-change-avatar .user-avatar img{width:42px;height:42px}.username-history .username-change .material-icon{margin:0 7px}.username-history .username-change-date{color:#777;font-size:12px}@media screen and (min-width:992px){.username-history li{overflow:auto}.username-history li.empty-message{text-align:center}.username-history .username-change-avatar{float:left}.username-history .username-change-avatar .user-avatar{margin-right:10px}.username-history .username-change-avatar .user-avatar img{width:18px;height:18px;position:relative;bottom:1px}.username-history .username-change-author{float:left;width:30%}.username-history .username-change{float:left;width:40%}.username-history .username-change-date{float:left;width:20%}.username-history.ui-ready .username-change-date{position:relative;top:2px}}

BIN
misago/static/misago/img/site-icon.png


BIN
misago/static/misago/img/site-logo.png


+ 8 - 11455
misago/static/misago/js/misago.js

@@ -1,11455 +1,8 @@
-(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-// shim for using process in browser
-
-var process = module.exports = {};
-var queue = [];
-var draining = false;
-var currentQueue;
-var queueIndex = -1;
-
-function cleanUpNextTick() {
-    draining = false;
-    if (currentQueue.length) {
-        queue = currentQueue.concat(queue);
-    } else {
-        queueIndex = -1;
-    }
-    if (queue.length) {
-        drainQueue();
-    }
-}
-
-function drainQueue() {
-    if (draining) {
-        return;
-    }
-    var timeout = setTimeout(cleanUpNextTick);
-    draining = true;
-
-    var len = queue.length;
-    while(len) {
-        currentQueue = queue;
-        queue = [];
-        while (++queueIndex < len) {
-            if (currentQueue) {
-                currentQueue[queueIndex].run();
-            }
-        }
-        queueIndex = -1;
-        len = queue.length;
-    }
-    currentQueue = null;
-    draining = false;
-    clearTimeout(timeout);
-}
-
-process.nextTick = function (fun) {
-    var args = new Array(arguments.length - 1);
-    if (arguments.length > 1) {
-        for (var i = 1; i < arguments.length; i++) {
-            args[i - 1] = arguments[i];
-        }
-    }
-    queue.push(new Item(fun, args));
-    if (queue.length === 1 && !draining) {
-        setTimeout(drainQueue, 0);
-    }
-};
-
-// v8 likes predictible objects
-function Item(fun, array) {
-    this.fun = fun;
-    this.array = array;
-}
-Item.prototype.run = function () {
-    this.fun.apply(null, this.array);
-};
-process.title = 'browser';
-process.browser = true;
-process.env = {};
-process.argv = [];
-process.version = ''; // empty string to avoid regexp issues
-process.versions = {};
-
-function noop() {}
-
-process.on = noop;
-process.addListener = noop;
-process.once = noop;
-process.off = noop;
-process.removeListener = noop;
-process.removeAllListeners = noop;
-process.emit = noop;
-
-process.binding = function (name) {
-    throw new Error('process.binding is not supported');
-};
-
-process.cwd = function () { return '/' };
-process.chdir = function (dir) {
-    throw new Error('process.chdir is not supported');
-};
-process.umask = function() { return 0; };
-
-},{}],2:[function(require,module,exports){
-(function (global){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.Misago = undefined;
-
-var _orderedList = require('../../../../documents/misago/frontend/src/utils/ordered-list');
-
-var _orderedList2 = _interopRequireDefault(_orderedList);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var Misago = exports.Misago = function () {
-  function Misago() {
-    _classCallCheck(this, Misago);
-
-    this._initializers = [];
-    this._context = {};
-  }
-
-  _createClass(Misago, [{
-    key: 'addInitializer',
-    value: function addInitializer(initializer) {
-      this._initializers.push({
-        key: initializer.name,
-
-        item: initializer.initializer,
-
-        after: initializer.after,
-        before: initializer.before
-      });
-    }
-  }, {
-    key: 'init',
-    value: function init(context) {
-      var _this = this;
-
-      this._context = context;
-
-      var initOrder = new _orderedList2.default(this._initializers).orderedValues();
-      initOrder.forEach(function (initializer) {
-        initializer(_this);
-      });
-    }
-
-    // context accessors
-
-  }, {
-    key: 'has',
-    value: function has(key) {
-      return !!this._context[key];
-    }
-  }, {
-    key: 'get',
-    value: function get(key, fallback) {
-      if (this.has(key)) {
-        return this._context[key];
-      } else {
-        return fallback || undefined;
-      }
-    }
-  }, {
-    key: 'pop',
-    value: function pop(key) {
-      if (this.has(key)) {
-        var value = this._context[key];
-        this._context[key] = null;
-        return value;
-      } else {
-        return undefined;
-      }
-    }
-  }]);
-
-  return Misago;
-}();
-
-// create  singleton
-
-var misago = new Misago();
-
-// expose it globally
-global.misago = misago;
-
-// and export it for tests and stuff
-exports.default = misago;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-
-},{"../../../../documents/misago/frontend/src/utils/ordered-list":106}],3:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _ajax2.default.init(_index2.default.get('CSRF_COOKIE_NAME'));
-}
-
-_index2.default.addInitializer({
-  name: 'ajax',
-  initializer: initializer
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/ajax":91}],4:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _reactRedux = require('react-redux');
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _authMessage = require('../../../../../documents/misago/frontend/src/components/auth-message');
-
-var _authMessage2 = _interopRequireDefault(_authMessage);
-
-var _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');
-
-var _mountComponent2 = _interopRequireDefault(_mountComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  (0, _mountComponent2.default)((0, _reactRedux.connect)(_authMessage.select)(_authMessage2.default), 'auth-message-mount');
-}
-
-_index2.default.addInitializer({
-  name: 'component:auth-message',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/components/auth-message":48,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105,"react-redux":"react-redux"}],5:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _auth = require('../../../../../documents/misago/frontend/src/reducers/auth');
-
-var _auth2 = _interopRequireDefault(_auth);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer(context) {
-  _store2.default.addReducer('auth', _auth2.default, Object.assign({
-    'isAuthenticated': context.get('isAuthenticated'),
-    'isAnonymous': !context.get('isAuthenticated'),
-
-    'user': context.get('user')
-  }, _auth.initialState));
-}
-
-_index2.default.addInitializer({
-  name: 'reducer:auth',
-  initializer: initializer,
-  before: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/auth":86,"../../../../../documents/misago/frontend/src/services/store":100}],6:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _auth = require('../../../../../documents/misago/frontend/src/services/auth');
-
-var _auth2 = _interopRequireDefault(_auth);
-
-var _modal = require('../../../../../documents/misago/frontend/src/services/modal');
-
-var _modal2 = _interopRequireDefault(_modal);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-var _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');
-
-var _localStorage2 = _interopRequireDefault(_localStorage);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _auth2.default.init(_store2.default, _localStorage2.default, _modal2.default);
-}
-
-_index2.default.addInitializer({
-  name: 'auth',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/auth":92,"../../../../../documents/misago/frontend/src/services/local-storage":95,"../../../../../documents/misago/frontend/src/services/modal":97,"../../../../../documents/misago/frontend/src/services/store":100}],7:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _bannedPage = require('../../../../../documents/misago/frontend/src/utils/banned-page');
-
-var _bannedPage2 = _interopRequireDefault(_bannedPage);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer(context) {
-  if (context.has('BAN_MESSAGE')) {
-    (0, _bannedPage2.default)(context.get('BAN_MESSAGE'), false);
-  }
-}
-
-_index2.default.addInitializer({
-  name: 'component:baned-page',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/banned-page":102}],8:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _captcha = require('../../../../../documents/misago/frontend/src/services/captcha');
-
-var _captcha2 = _interopRequireDefault(_captcha);
-
-var _include = require('../../../../../documents/misago/frontend/src/services/include');
-
-var _include2 = _interopRequireDefault(_include);
-
-var _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer(context) {
-  _captcha2.default.init(context, _ajax2.default, _include2.default, _snackbar2.default);
-}
-
-_index2.default.addInitializer({
-  name: 'captcha',
-  initializer: initializer
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/ajax":91,"../../../../../documents/misago/frontend/src/services/captcha":93,"../../../../../documents/misago/frontend/src/services/include":94,"../../../../../documents/misago/frontend/src/services/snackbar":99}],9:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _include = require('../../../../../documents/misago/frontend/src/services/include');
-
-var _include2 = _interopRequireDefault(_include);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer(context) {
-  _include2.default.init(context.get('STATIC_URL'));
-}
-
-_index2.default.addInitializer({
-  name: 'include',
-  initializer: initializer
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/include":94}],10:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');
-
-var _localStorage2 = _interopRequireDefault(_localStorage);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _localStorage2.default.init('misago_');
-}
-
-_index2.default.addInitializer({
-  name: 'local-storage',
-  initializer: initializer
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/local-storage":95}],11:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _mobileNavbarDropdown = require('../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown');
-
-var _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  var element = document.getElementById('mobile-navbar-dropdown-mount');
-  if (element) {
-    _mobileNavbarDropdown2.default.init(element);
-  }
-}
-
-_index2.default.addInitializer({
-  name: 'dropdown',
-  initializer: initializer,
-  before: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown":96}],12:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _modal = require('../../../../../documents/misago/frontend/src/services/modal');
-
-var _modal2 = _interopRequireDefault(_modal);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  var element = document.getElementById('modal-mount');
-  if (element) {
-    _modal2.default.init(element);
-  }
-}
-
-_index2.default.addInitializer({
-  name: 'modal',
-  initializer: initializer,
-  before: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/modal":97}],13:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _moment = require('moment');
-
-var _moment2 = _interopRequireDefault(_moment);
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _moment2.default.locale($('html').attr('lang'));
-}
-
-_index2.default.addInitializer({
-  name: 'moment',
-  initializer: initializer
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"moment":"moment"}],14:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _root = require('../../../../../documents/misago/frontend/src/components/options/root');
-
-var _root2 = _interopRequireDefault(_root);
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-var _routedComponent = require('../../../../../documents/misago/frontend/src/utils/routed-component');
-
-var _routedComponent2 = _interopRequireDefault(_routedComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer(context) {
-  if (context.has('USER_OPTIONS')) {
-    (0, _routedComponent2.default)({
-      root: _index2.default.get('USERCP_URL'),
-      component: _root2.default,
-      paths: (0, _root.paths)(_store2.default)
-    });
-  }
-}
-
-_index2.default.addInitializer({
-  name: 'component:options',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/components/options/root":65,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/store":100,"../../../../../documents/misago/frontend/src/utils/routed-component":108}],15:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _pageTitle = require('../../../../../documents/misago/frontend/src/services/page-title');
-
-var _pageTitle2 = _interopRequireDefault(_pageTitle);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer(context) {
-  _pageTitle2.default.init(context.get('SETTINGS').forum_name);
-}
-
-_index2.default.addInitializer({
-  name: 'page-title',
-  initializer: initializer
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/page-title":98}],16:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _requestActivationLink = require('../../../../../documents/misago/frontend/src/components/request-activation-link');
-
-var _requestActivationLink2 = _interopRequireDefault(_requestActivationLink);
-
-var _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');
-
-var _mountComponent2 = _interopRequireDefault(_mountComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  if (document.getElementById('request-activation-link-mount')) {
-    (0, _mountComponent2.default)(_requestActivationLink2.default, 'request-activation-link-mount', false);
-  }
-}
-
-_index2.default.addInitializer({
-  name: 'component:request-activation-link',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/components/request-activation-link":70,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105}],17:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _requestPasswordReset = require('../../../../../documents/misago/frontend/src/components/request-password-reset');
-
-var _requestPasswordReset2 = _interopRequireDefault(_requestPasswordReset);
-
-var _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');
-
-var _mountComponent2 = _interopRequireDefault(_mountComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  if (document.getElementById('request-password-reset-mount')) {
-    (0, _mountComponent2.default)(_requestPasswordReset2.default, 'request-password-reset-mount', false);
-  }
-}
-
-_index2.default.addInitializer({
-  name: 'component:request-password-reset',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/components/request-password-reset":71,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105}],18:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _resetPasswordForm = require('../../../../../documents/misago/frontend/src/components/reset-password-form');
-
-var _resetPasswordForm2 = _interopRequireDefault(_resetPasswordForm);
-
-var _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');
-
-var _mountComponent2 = _interopRequireDefault(_mountComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  if (document.getElementById('reset-password-form-mount')) {
-    (0, _mountComponent2.default)(_resetPasswordForm2.default, 'reset-password-form-mount', false);
-  }
-}
-
-_index2.default.addInitializer({
-  name: 'component:reset-password-form',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/components/reset-password-form":72,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105}],19:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _reactRedux = require('react-redux');
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _snackbar = require('../../../../../documents/misago/frontend/src/components/snackbar');
-
-var _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');
-
-var _mountComponent2 = _interopRequireDefault(_mountComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  (0, _mountComponent2.default)((0, _reactRedux.connect)(_snackbar.select)(_snackbar.Snackbar), 'snackbar-mount');
-}
-
-_index2.default.addInitializer({
-  name: 'component:snackbar',
-  initializer: initializer,
-  after: 'snackbar'
-});
-
-},{"../../../../../documents/misago/frontend/src/components/snackbar":75,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105,"react-redux":"react-redux"}],20:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _snackbar = require('../../../../../documents/misago/frontend/src/reducers/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _store2.default.addReducer('snackbar', _snackbar2.default, _snackbar.initialState);
-}
-
-_index2.default.addInitializer({
-  name: 'reducer:snackbar',
-  initializer: initializer,
-  before: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/snackbar":87,"../../../../../documents/misago/frontend/src/services/store":100}],21:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _snackbar2.default.init(_store2.default);
-}
-
-_index2.default.addInitializer({
-  name: 'snackbar',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/snackbar":99,"../../../../../documents/misago/frontend/src/services/store":100}],22:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _store2.default.init();
-}
-
-_index2.default.addInitializer({
-  name: 'store',
-  initializer: initializer,
-  before: '_end'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/store":100}],23:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _tick = require('../../../../../documents/misago/frontend/src/reducers/tick');
-
-var _tick2 = _interopRequireDefault(_tick);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _store2.default.addReducer('tick', _tick2.default, _tick.initialState);
-}
-
-_index2.default.addInitializer({
-  name: 'reducer:tick',
-  initializer: initializer,
-  before: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/tick":88,"../../../../../documents/misago/frontend/src/services/store":100}],24:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _tick = require('../../../../../documents/misago/frontend/src/reducers/tick');
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var TICK_PERIOD = 50 * 1000; //do the tick every 50s
-
-function initializer() {
-  window.setInterval(function () {
-    _store2.default.dispatch((0, _tick.doTick)());
-  }, TICK_PERIOD);
-}
-
-_index2.default.addInitializer({
-  name: 'tick-start',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/tick":88,"../../../../../documents/misago/frontend/src/services/store":100}],25:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _reactRedux = require('react-redux');
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _root = require('../../../../../documents/misago/frontend/src/components/user-menu/root');
-
-var _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');
-
-var _mountComponent2 = _interopRequireDefault(_mountComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.UserMenu), 'user-menu-mount');
-  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.CompactUserMenu), 'user-menu-compact-mount');
-}
-
-_index2.default.addInitializer({
-  name: 'component:user-menu',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/components/user-menu/root":77,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105,"react-redux":"react-redux"}],26:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _usernameHistory = require('../../../../../documents/misago/frontend/src/reducers/username-history');
-
-var _usernameHistory2 = _interopRequireDefault(_usernameHistory);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _store2.default.addReducer('username-history', _usernameHistory2.default, []);
-}
-
-_index2.default.addInitializer({
-  name: 'reducer:username-history',
-  initializer: initializer,
-  before: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/username-history":89,"../../../../../documents/misago/frontend/src/services/store":100}],27:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _root = require('../../../../../documents/misago/frontend/src/components/users/root');
-
-var _root2 = _interopRequireDefault(_root);
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-var _routedComponent = require('../../../../../documents/misago/frontend/src/utils/routed-component');
-
-var _routedComponent2 = _interopRequireDefault(_routedComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer(context) {
-  if (context.has('USERS_LISTS')) {
-    (0, _routedComponent2.default)({
-      root: _index2.default.get('USERS_LIST_URL'),
-      component: _root2.default,
-      paths: (0, _root.paths)(_store2.default)
-    });
-  }
-}
-
-_index2.default.addInitializer({
-  name: 'component:users',
-  initializer: initializer,
-  after: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/components/users/root":83,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/store":100,"../../../../../documents/misago/frontend/src/utils/routed-component":108}],28:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _users = require('../../../../../documents/misago/frontend/src/reducers/users');
-
-var _users2 = _interopRequireDefault(_users);
-
-var _store = require('../../../../../documents/misago/frontend/src/services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _store2.default.addReducer('users', _users2.default, []);
-}
-
-_index2.default.addInitializer({
-  name: 'reducer:users',
-  initializer: initializer,
-  before: 'store'
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/users":90,"../../../../../documents/misago/frontend/src/services/store":100}],29:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.default = initializer;
-
-var _index = require('../../../../../documents/misago/frontend/src/index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _include = require('../../../../../documents/misago/frontend/src/services/include');
-
-var _include2 = _interopRequireDefault(_include);
-
-var _zxcvbn = require('../../../../../documents/misago/frontend/src/services/zxcvbn');
-
-var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function initializer() {
-  _zxcvbn2.default.init(_include2.default);
-}
-
-_index2.default.addInitializer({
-  name: 'zxcvbn',
-  initializer: initializer
-});
-
-},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/include":94,"../../../../../documents/misago/frontend/src/services/zxcvbn":101}],30:[function(require,module,exports){
-var pSlice = Array.prototype.slice;
-var objectKeys = require('./lib/keys.js');
-var isArguments = require('./lib/is_arguments.js');
-
-var deepEqual = module.exports = function (actual, expected, opts) {
-  if (!opts) opts = {};
-  // 7.1. All identical values are equivalent, as determined by ===.
-  if (actual === expected) {
-    return true;
-
-  } else if (actual instanceof Date && expected instanceof Date) {
-    return actual.getTime() === expected.getTime();
-
-  // 7.3. Other pairs that do not both pass typeof value == 'object',
-  // equivalence is determined by ==.
-  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {
-    return opts.strict ? actual === expected : actual == expected;
-
-  // 7.4. For all other Object pairs, including Array objects, equivalence is
-  // determined by having the same number of owned properties (as verified
-  // with Object.prototype.hasOwnProperty.call), the same set of keys
-  // (although not necessarily the same order), equivalent values for every
-  // corresponding key, and an identical 'prototype' property. Note: this
-  // accounts for both named and indexed properties on Arrays.
-  } else {
-    return objEquiv(actual, expected, opts);
-  }
-}
-
-function isUndefinedOrNull(value) {
-  return value === null || value === undefined;
-}
-
-function isBuffer (x) {
-  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
-  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
-    return false;
-  }
-  if (x.length > 0 && typeof x[0] !== 'number') return false;
-  return true;
-}
-
-function objEquiv(a, b, opts) {
-  var i, key;
-  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
-    return false;
-  // an identical 'prototype' property.
-  if (a.prototype !== b.prototype) return false;
-  //~~~I've managed to break Object.keys through screwy arguments passing.
-  //   Converting to array solves the problem.
-  if (isArguments(a)) {
-    if (!isArguments(b)) {
-      return false;
-    }
-    a = pSlice.call(a);
-    b = pSlice.call(b);
-    return deepEqual(a, b, opts);
-  }
-  if (isBuffer(a)) {
-    if (!isBuffer(b)) {
-      return false;
-    }
-    if (a.length !== b.length) return false;
-    for (i = 0; i < a.length; i++) {
-      if (a[i] !== b[i]) return false;
-    }
-    return true;
-  }
-  try {
-    var ka = objectKeys(a),
-        kb = objectKeys(b);
-  } catch (e) {//happens when one is a string literal and the other isn't
-    return false;
-  }
-  // having the same number of owned properties (keys incorporates
-  // hasOwnProperty)
-  if (ka.length != kb.length)
-    return false;
-  //the same set of keys (although not necessarily the same order),
-  ka.sort();
-  kb.sort();
-  //~~~cheap key test
-  for (i = ka.length - 1; i >= 0; i--) {
-    if (ka[i] != kb[i])
-      return false;
-  }
-  //equivalent values for every corresponding key, and
-  //~~~possibly expensive deep test
-  for (i = ka.length - 1; i >= 0; i--) {
-    key = ka[i];
-    if (!deepEqual(a[key], b[key], opts)) return false;
-  }
-  return typeof a === typeof b;
-}
-
-},{"./lib/is_arguments.js":31,"./lib/keys.js":32}],31:[function(require,module,exports){
-var supportsArgumentsClass = (function(){
-  return Object.prototype.toString.call(arguments)
-})() == '[object Arguments]';
-
-exports = module.exports = supportsArgumentsClass ? supported : unsupported;
-
-exports.supported = supported;
-function supported(object) {
-  return Object.prototype.toString.call(object) == '[object Arguments]';
-};
-
-exports.unsupported = unsupported;
-function unsupported(object){
-  return object &&
-    typeof object == 'object' &&
-    typeof object.length == 'number' &&
-    Object.prototype.hasOwnProperty.call(object, 'callee') &&
-    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||
-    false;
-};
-
-},{}],32:[function(require,module,exports){
-exports = module.exports = typeof Object.keys === 'function'
-  ? Object.keys : shim;
-
-exports.shim = shim;
-function shim (obj) {
-  var keys = [];
-  for (var key in obj) keys.push(key);
-  return keys;
-}
-
-},{}],33:[function(require,module,exports){
-/**
- * Indicates that navigation was caused by a call to history.push.
- */
-'use strict';
-
-exports.__esModule = true;
-var PUSH = 'PUSH';
-
-exports.PUSH = PUSH;
-/**
- * Indicates that navigation was caused by a call to history.replace.
- */
-var REPLACE = 'REPLACE';
-
-exports.REPLACE = REPLACE;
-/**
- * Indicates that navigation was caused by some other action such
- * as using a browser's back/forward buttons and/or manually manipulating
- * the URL in a browser's location bar. This is the default.
- *
- * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate
- * for more information.
- */
-var POP = 'POP';
-
-exports.POP = POP;
-exports['default'] = {
-  PUSH: PUSH,
-  REPLACE: REPLACE,
-  POP: POP
-};
-},{}],34:[function(require,module,exports){
-"use strict";
-
-exports.__esModule = true;
-exports.loopAsync = loopAsync;
-
-function loopAsync(turns, work, callback) {
-  var currentTurn = 0;
-  var isDone = false;
-
-  function done() {
-    isDone = true;
-    callback.apply(this, arguments);
-  }
-
-  function next() {
-    if (isDone) return;
-
-    if (currentTurn < turns) {
-      work.call(this, currentTurn++, next, done);
-    } else {
-      done.apply(this, arguments);
-    }
-  }
-
-  next();
-}
-},{}],35:[function(require,module,exports){
-(function (process){
-/*eslint-disable no-empty */
-'use strict';
-
-exports.__esModule = true;
-exports.saveState = saveState;
-exports.readState = readState;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _warning = require('warning');
-
-var _warning2 = _interopRequireDefault(_warning);
-
-var KeyPrefix = '@@History/';
-var QuotaExceededError = 'QuotaExceededError';
-var SecurityError = 'SecurityError';
-
-function createKey(key) {
-  return KeyPrefix + key;
-}
-
-function saveState(key, state) {
-  try {
-    window.sessionStorage.setItem(createKey(key), JSON.stringify(state));
-  } catch (error) {
-    if (error.name === SecurityError) {
-      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
-      // attempt to access window.sessionStorage.
-      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;
-
-      return;
-    }
-
-    if (error.name === QuotaExceededError && window.sessionStorage.length === 0) {
-      // Safari "private mode" throws QuotaExceededError.
-      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;
-
-      return;
-    }
-
-    throw error;
-  }
-}
-
-function readState(key) {
-  var json = undefined;
-  try {
-    json = window.sessionStorage.getItem(createKey(key));
-  } catch (error) {
-    if (error.name === SecurityError) {
-      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
-      // attempt to access window.sessionStorage.
-      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;
-
-      return null;
-    }
-  }
-
-  if (json) {
-    try {
-      return JSON.parse(json);
-    } catch (error) {
-      // Ignore invalid JSON.
-    }
-  }
-
-  return null;
-}
-}).call(this,require('_process'))
-
-},{"_process":1,"warning":47}],36:[function(require,module,exports){
-'use strict';
-
-exports.__esModule = true;
-exports.addEventListener = addEventListener;
-exports.removeEventListener = removeEventListener;
-exports.getHashPath = getHashPath;
-exports.replaceHashPath = replaceHashPath;
-exports.getWindowPath = getWindowPath;
-exports.go = go;
-exports.getUserConfirmation = getUserConfirmation;
-exports.supportsHistory = supportsHistory;
-exports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;
-
-function addEventListener(node, event, listener) {
-  if (node.addEventListener) {
-    node.addEventListener(event, listener, false);
-  } else {
-    node.attachEvent('on' + event, listener);
-  }
-}
-
-function removeEventListener(node, event, listener) {
-  if (node.removeEventListener) {
-    node.removeEventListener(event, listener, false);
-  } else {
-    node.detachEvent('on' + event, listener);
-  }
-}
-
-function getHashPath() {
-  // We can't use window.location.hash here because it's not
-  // consistent across browsers - Firefox will pre-decode it!
-  return window.location.href.split('#')[1] || '';
-}
-
-function replaceHashPath(path) {
-  window.location.replace(window.location.pathname + window.location.search + '#' + path);
-}
-
-function getWindowPath() {
-  return window.location.pathname + window.location.search + window.location.hash;
-}
-
-function go(n) {
-  if (n) window.history.go(n);
-}
-
-function getUserConfirmation(message, callback) {
-  callback(window.confirm(message));
-}
-
-/**
- * Returns true if the HTML5 history API is supported. Taken from Modernizr.
- *
- * https://github.com/Modernizr/Modernizr/blob/master/LICENSE
- * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js
- * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586
- */
-
-function supportsHistory() {
-  var ua = navigator.userAgent;
-  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {
-    return false;
-  }
-  // FIXME: Work around our browser history not working correctly on Chrome
-  // iOS: https://github.com/rackt/react-router/issues/2565
-  if (ua.indexOf('CriOS') !== -1) {
-    return false;
-  }
-  return window.history && 'pushState' in window.history;
-}
-
-/**
- * Returns false if using go(n) with hash history causes a full page reload.
- */
-
-function supportsGoWithoutReloadUsingHash() {
-  var ua = navigator.userAgent;
-  return ua.indexOf('Firefox') === -1;
-}
-},{}],37:[function(require,module,exports){
-'use strict';
-
-exports.__esModule = true;
-var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
-exports.canUseDOM = canUseDOM;
-},{}],38:[function(require,module,exports){
-(function (process){
-'use strict';
-
-exports.__esModule = true;
-
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _invariant = require('invariant');
-
-var _invariant2 = _interopRequireDefault(_invariant);
-
-var _Actions = require('./Actions');
-
-var _ExecutionEnvironment = require('./ExecutionEnvironment');
-
-var _DOMUtils = require('./DOMUtils');
-
-var _DOMStateStorage = require('./DOMStateStorage');
-
-var _createDOMHistory = require('./createDOMHistory');
-
-var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);
-
-var _parsePath = require('./parsePath');
-
-var _parsePath2 = _interopRequireDefault(_parsePath);
-
-/**
- * Creates and returns a history object that uses HTML5's history API
- * (pushState, replaceState, and the popstate event) to manage history.
- * This is the recommended method of managing history in browsers because
- * it provides the cleanest URLs.
- *
- * Note: In browsers that do not support the HTML5 history API full
- * page reloads will be used to preserve URLs.
- */
-function createBrowserHistory() {
-  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
-
-  !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;
-
-  var forceRefresh = options.forceRefresh;
-
-  var isSupported = _DOMUtils.supportsHistory();
-  var useRefresh = !isSupported || forceRefresh;
-
-  function getCurrentLocation(historyState) {
-    historyState = historyState || window.history.state || {};
-
-    var path = _DOMUtils.getWindowPath();
-    var _historyState = historyState;
-    var key = _historyState.key;
-
-    var state = undefined;
-    if (key) {
-      state = _DOMStateStorage.readState(key);
-    } else {
-      state = null;
-      key = history.createKey();
-
-      if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path);
-    }
-
-    var location = _parsePath2['default'](path);
-
-    return history.createLocation(_extends({}, location, { state: state }), undefined, key);
-  }
-
-  function startPopStateListener(_ref) {
-    var transitionTo = _ref.transitionTo;
-
-    function popStateListener(event) {
-      if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.
-
-      transitionTo(getCurrentLocation(event.state));
-    }
-
-    _DOMUtils.addEventListener(window, 'popstate', popStateListener);
-
-    return function () {
-      _DOMUtils.removeEventListener(window, 'popstate', popStateListener);
-    };
-  }
-
-  function finishTransition(location) {
-    var basename = location.basename;
-    var pathname = location.pathname;
-    var search = location.search;
-    var hash = location.hash;
-    var state = location.state;
-    var action = location.action;
-    var key = location.key;
-
-    if (action === _Actions.POP) return; // Nothing to do.
-
-    _DOMStateStorage.saveState(key, state);
-
-    var path = (basename || '') + pathname + search + hash;
-    var historyState = {
-      key: key
-    };
-
-    if (action === _Actions.PUSH) {
-      if (useRefresh) {
-        window.location.href = path;
-        return false; // Prevent location update.
-      } else {
-          window.history.pushState(historyState, null, path);
-        }
-    } else {
-      // REPLACE
-      if (useRefresh) {
-        window.location.replace(path);
-        return false; // Prevent location update.
-      } else {
-          window.history.replaceState(historyState, null, path);
-        }
-    }
-  }
-
-  var history = _createDOMHistory2['default'](_extends({}, options, {
-    getCurrentLocation: getCurrentLocation,
-    finishTransition: finishTransition,
-    saveState: _DOMStateStorage.saveState
-  }));
-
-  var listenerCount = 0,
-      stopPopStateListener = undefined;
-
-  function listenBefore(listener) {
-    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);
-
-    var unlisten = history.listenBefore(listener);
-
-    return function () {
-      unlisten();
-
-      if (--listenerCount === 0) stopPopStateListener();
-    };
-  }
-
-  function listen(listener) {
-    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);
-
-    var unlisten = history.listen(listener);
-
-    return function () {
-      unlisten();
-
-      if (--listenerCount === 0) stopPopStateListener();
-    };
-  }
-
-  // deprecated
-  function registerTransitionHook(hook) {
-    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);
-
-    history.registerTransitionHook(hook);
-  }
-
-  // deprecated
-  function unregisterTransitionHook(hook) {
-    history.unregisterTransitionHook(hook);
-
-    if (--listenerCount === 0) stopPopStateListener();
-  }
-
-  return _extends({}, history, {
-    listenBefore: listenBefore,
-    listen: listen,
-    registerTransitionHook: registerTransitionHook,
-    unregisterTransitionHook: unregisterTransitionHook
-  });
-}
-
-exports['default'] = createBrowserHistory;
-module.exports = exports['default'];
-}).call(this,require('_process'))
-
-},{"./Actions":33,"./DOMStateStorage":35,"./DOMUtils":36,"./ExecutionEnvironment":37,"./createDOMHistory":39,"./parsePath":44,"_process":1,"invariant":46}],39:[function(require,module,exports){
-(function (process){
-'use strict';
-
-exports.__esModule = true;
-
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _invariant = require('invariant');
-
-var _invariant2 = _interopRequireDefault(_invariant);
-
-var _ExecutionEnvironment = require('./ExecutionEnvironment');
-
-var _DOMUtils = require('./DOMUtils');
-
-var _createHistory = require('./createHistory');
-
-var _createHistory2 = _interopRequireDefault(_createHistory);
-
-function createDOMHistory(options) {
-  var history = _createHistory2['default'](_extends({
-    getUserConfirmation: _DOMUtils.getUserConfirmation
-  }, options, {
-    go: _DOMUtils.go
-  }));
-
-  function listen(listener) {
-    !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;
-
-    return history.listen(listener);
-  }
-
-  return _extends({}, history, {
-    listen: listen
-  });
-}
-
-exports['default'] = createDOMHistory;
-module.exports = exports['default'];
-}).call(this,require('_process'))
-
-},{"./DOMUtils":36,"./ExecutionEnvironment":37,"./createHistory":40,"_process":1,"invariant":46}],40:[function(require,module,exports){
-//import warning from 'warning'
-'use strict';
-
-exports.__esModule = true;
-
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _deepEqual = require('deep-equal');
-
-var _deepEqual2 = _interopRequireDefault(_deepEqual);
-
-var _AsyncUtils = require('./AsyncUtils');
-
-var _Actions = require('./Actions');
-
-var _createLocation2 = require('./createLocation');
-
-var _createLocation3 = _interopRequireDefault(_createLocation2);
-
-var _runTransitionHook = require('./runTransitionHook');
-
-var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);
-
-var _parsePath = require('./parsePath');
-
-var _parsePath2 = _interopRequireDefault(_parsePath);
-
-var _deprecate = require('./deprecate');
-
-var _deprecate2 = _interopRequireDefault(_deprecate);
-
-function createRandomKey(length) {
-  return Math.random().toString(36).substr(2, length);
-}
-
-function locationsAreEqual(a, b) {
-  return a.pathname === b.pathname && a.search === b.search &&
-  //a.action === b.action && // Different action !== location change.
-  a.key === b.key && _deepEqual2['default'](a.state, b.state);
-}
-
-var DefaultKeyLength = 6;
-
-function createHistory() {
-  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
-  var getCurrentLocation = options.getCurrentLocation;
-  var finishTransition = options.finishTransition;
-  var saveState = options.saveState;
-  var go = options.go;
-  var keyLength = options.keyLength;
-  var getUserConfirmation = options.getUserConfirmation;
-
-  if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;
-
-  var transitionHooks = [];
-
-  function listenBefore(hook) {
-    transitionHooks.push(hook);
-
-    return function () {
-      transitionHooks = transitionHooks.filter(function (item) {
-        return item !== hook;
-      });
-    };
-  }
-
-  var allKeys = [];
-  var changeListeners = [];
-  var location = undefined;
-
-  function getCurrent() {
-    if (pendingLocation && pendingLocation.action === _Actions.POP) {
-      return allKeys.indexOf(pendingLocation.key);
-    } else if (location) {
-      return allKeys.indexOf(location.key);
-    } else {
-      return -1;
-    }
-  }
-
-  function updateLocation(newLocation) {
-    var current = getCurrent();
-
-    location = newLocation;
-
-    if (location.action === _Actions.PUSH) {
-      allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);
-    } else if (location.action === _Actions.REPLACE) {
-      allKeys[current] = location.key;
-    }
-
-    changeListeners.forEach(function (listener) {
-      listener(location);
-    });
-  }
-
-  function listen(listener) {
-    changeListeners.push(listener);
-
-    if (location) {
-      listener(location);
-    } else {
-      var _location = getCurrentLocation();
-      allKeys = [_location.key];
-      updateLocation(_location);
-    }
-
-    return function () {
-      changeListeners = changeListeners.filter(function (item) {
-        return item !== listener;
-      });
-    };
-  }
-
-  function confirmTransitionTo(location, callback) {
-    _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {
-      _runTransitionHook2['default'](transitionHooks[index], location, function (result) {
-        if (result != null) {
-          done(result);
-        } else {
-          next();
-        }
-      });
-    }, function (message) {
-      if (getUserConfirmation && typeof message === 'string') {
-        getUserConfirmation(message, function (ok) {
-          callback(ok !== false);
-        });
-      } else {
-        callback(message !== false);
-      }
-    });
-  }
-
-  var pendingLocation = undefined;
-
-  function transitionTo(nextLocation) {
-    if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.
-
-    pendingLocation = nextLocation;
-
-    confirmTransitionTo(nextLocation, function (ok) {
-      if (pendingLocation !== nextLocation) return; // Transition was interrupted.
-
-      if (ok) {
-        // treat PUSH to current path like REPLACE to be consistent with browsers
-        if (nextLocation.action === _Actions.PUSH) {
-          var prevPath = createPath(location);
-          var nextPath = createPath(nextLocation);
-
-          if (nextPath === prevPath) nextLocation.action = _Actions.REPLACE;
-        }
-
-        if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);
-      } else if (location && nextLocation.action === _Actions.POP) {
-        var prevIndex = allKeys.indexOf(location.key);
-        var nextIndex = allKeys.indexOf(nextLocation.key);
-
-        if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.
-      }
-    });
-  }
-
-  function push(location) {
-    transitionTo(createLocation(location, _Actions.PUSH, createKey()));
-  }
-
-  function replace(location) {
-    transitionTo(createLocation(location, _Actions.REPLACE, createKey()));
-  }
-
-  function goBack() {
-    go(-1);
-  }
-
-  function goForward() {
-    go(1);
-  }
-
-  function createKey() {
-    return createRandomKey(keyLength);
-  }
-
-  function createPath(location) {
-    if (location == null || typeof location === 'string') return location;
-
-    var pathname = location.pathname;
-    var search = location.search;
-    var hash = location.hash;
-
-    var result = pathname;
-
-    if (search) result += search;
-
-    if (hash) result += hash;
-
-    return result;
-  }
-
-  function createHref(location) {
-    return createPath(location);
-  }
-
-  function createLocation(location, action) {
-    var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];
-
-    if (typeof action === 'object') {
-      //warning(
-      //  false,
-      //  'The state (2nd) argument to history.createLocation is deprecated; use a ' +
-      //  'location descriptor instead'
-      //)
-
-      if (typeof location === 'string') location = _parsePath2['default'](location);
-
-      location = _extends({}, location, { state: action });
-
-      action = key;
-      key = arguments[3] || createKey();
-    }
-
-    return _createLocation3['default'](location, action, key);
-  }
-
-  // deprecated
-  function setState(state) {
-    if (location) {
-      updateLocationState(location, state);
-      updateLocation(location);
-    } else {
-      updateLocationState(getCurrentLocation(), state);
-    }
-  }
-
-  function updateLocationState(location, state) {
-    location.state = _extends({}, location.state, state);
-    saveState(location.key, location.state);
-  }
-
-  // deprecated
-  function registerTransitionHook(hook) {
-    if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);
-  }
-
-  // deprecated
-  function unregisterTransitionHook(hook) {
-    transitionHooks = transitionHooks.filter(function (item) {
-      return item !== hook;
-    });
-  }
-
-  // deprecated
-  function pushState(state, path) {
-    if (typeof path === 'string') path = _parsePath2['default'](path);
-
-    push(_extends({ state: state }, path));
-  }
-
-  // deprecated
-  function replaceState(state, path) {
-    if (typeof path === 'string') path = _parsePath2['default'](path);
-
-    replace(_extends({ state: state }, path));
-  }
-
-  return {
-    listenBefore: listenBefore,
-    listen: listen,
-    transitionTo: transitionTo,
-    push: push,
-    replace: replace,
-    go: go,
-    goBack: goBack,
-    goForward: goForward,
-    createKey: createKey,
-    createPath: createPath,
-    createHref: createHref,
-    createLocation: createLocation,
-
-    setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),
-    registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),
-    unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),
-    pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),
-    replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')
-  };
-}
-
-exports['default'] = createHistory;
-module.exports = exports['default'];
-},{"./Actions":33,"./AsyncUtils":34,"./createLocation":41,"./deprecate":42,"./parsePath":44,"./runTransitionHook":45,"deep-equal":30}],41:[function(require,module,exports){
-//import warning from 'warning'
-'use strict';
-
-exports.__esModule = true;
-
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _Actions = require('./Actions');
-
-var _parsePath = require('./parsePath');
-
-var _parsePath2 = _interopRequireDefault(_parsePath);
-
-function createLocation() {
-  var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];
-  var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];
-  var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];
-
-  var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];
-
-  if (typeof location === 'string') location = _parsePath2['default'](location);
-
-  if (typeof action === 'object') {
-    //warning(
-    //  false,
-    //  'The state (2nd) argument to createLocation is deprecated; use a ' +
-    //  'location descriptor instead'
-    //)
-
-    location = _extends({}, location, { state: action });
-
-    action = key || _Actions.POP;
-    key = _fourthArg;
-  }
-
-  var pathname = location.pathname || '/';
-  var search = location.search || '';
-  var hash = location.hash || '';
-  var state = location.state || null;
-
-  return {
-    pathname: pathname,
-    search: search,
-    hash: hash,
-    state: state,
-    action: action,
-    key: key
-  };
-}
-
-exports['default'] = createLocation;
-module.exports = exports['default'];
-},{"./Actions":33,"./parsePath":44}],42:[function(require,module,exports){
-//import warning from 'warning'
-
-"use strict";
-
-exports.__esModule = true;
-function deprecate(fn) {
-  return fn;
-  //return function () {
-  //  warning(false, '[history] ' + message)
-  //  return fn.apply(this, arguments)
-  //}
-}
-
-exports["default"] = deprecate;
-module.exports = exports["default"];
-},{}],43:[function(require,module,exports){
-"use strict";
-
-exports.__esModule = true;
-function extractPath(string) {
-  var match = string.match(/^https?:\/\/[^\/]*/);
-
-  if (match == null) return string;
-
-  return string.substring(match[0].length);
-}
-
-exports["default"] = extractPath;
-module.exports = exports["default"];
-},{}],44:[function(require,module,exports){
-(function (process){
-'use strict';
-
-exports.__esModule = true;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _warning = require('warning');
-
-var _warning2 = _interopRequireDefault(_warning);
-
-var _extractPath = require('./extractPath');
-
-var _extractPath2 = _interopRequireDefault(_extractPath);
-
-function parsePath(path) {
-  var pathname = _extractPath2['default'](path);
-  var search = '';
-  var hash = '';
-
-  process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like "%s"', path) : undefined;
-
-  var hashIndex = pathname.indexOf('#');
-  if (hashIndex !== -1) {
-    hash = pathname.substring(hashIndex);
-    pathname = pathname.substring(0, hashIndex);
-  }
-
-  var searchIndex = pathname.indexOf('?');
-  if (searchIndex !== -1) {
-    search = pathname.substring(searchIndex);
-    pathname = pathname.substring(0, searchIndex);
-  }
-
-  if (pathname === '') pathname = '/';
-
-  return {
-    pathname: pathname,
-    search: search,
-    hash: hash
-  };
-}
-
-exports['default'] = parsePath;
-module.exports = exports['default'];
-}).call(this,require('_process'))
-
-},{"./extractPath":43,"_process":1,"warning":47}],45:[function(require,module,exports){
-(function (process){
-'use strict';
-
-exports.__esModule = true;
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
-
-var _warning = require('warning');
-
-var _warning2 = _interopRequireDefault(_warning);
-
-function runTransitionHook(hook, location, callback) {
-  var result = hook(location, callback);
-
-  if (hook.length < 2) {
-    // Assume the hook runs synchronously and automatically
-    // call the callback with the return value.
-    callback(result);
-  } else {
-    process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not "return" in a transition hook with a callback argument; call the callback instead') : undefined;
-  }
-}
-
-exports['default'] = runTransitionHook;
-module.exports = exports['default'];
-}).call(this,require('_process'))
-
-},{"_process":1,"warning":47}],46:[function(require,module,exports){
-(function (process){
-/**
- * Copyright 2013-2015, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- */
-
-'use strict';
-
-/**
- * Use invariant() to assert state which your program assumes to be true.
- *
- * Provide sprintf-style format (only %s is supported) and arguments
- * to provide information about what broke and what you were
- * expecting.
- *
- * The invariant message will be stripped in production, but the invariant
- * will remain to ensure logic does not differ in production.
- */
-
-var invariant = function(condition, format, a, b, c, d, e, f) {
-  if (process.env.NODE_ENV !== 'production') {
-    if (format === undefined) {
-      throw new Error('invariant requires an error message argument');
-    }
-  }
-
-  if (!condition) {
-    var error;
-    if (format === undefined) {
-      error = new Error(
-        'Minified exception occurred; use the non-minified dev environment ' +
-        'for the full error message and additional helpful warnings.'
-      );
-    } else {
-      var args = [a, b, c, d, e, f];
-      var argIndex = 0;
-      error = new Error(
-        format.replace(/%s/g, function() { return args[argIndex++]; })
-      );
-      error.name = 'Invariant Violation';
-    }
-
-    error.framesToPop = 1; // we don't care about invariant's own frame
-    throw error;
-  }
-};
-
-module.exports = invariant;
-
-}).call(this,require('_process'))
-
-},{"_process":1}],47:[function(require,module,exports){
-(function (process){
-/**
- * Copyright 2014-2015, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- */
-
-'use strict';
-
-/**
- * Similar to invariant but only logs a warning if the condition is not met.
- * This can be used to log issues in development environments in critical
- * paths. Removing the logging code for production environments will keep the
- * same logic and follow the same code paths.
- */
-
-var warning = function() {};
-
-if (process.env.NODE_ENV !== 'production') {
-  warning = function(condition, format, args) {
-    var len = arguments.length;
-    args = new Array(len > 2 ? len - 2 : 0);
-    for (var key = 2; key < len; key++) {
-      args[key - 2] = arguments[key];
-    }
-    if (format === undefined) {
-      throw new Error(
-        '`warning(condition, format, ...args)` requires a warning ' +
-        'message argument'
-      );
-    }
-
-    if (format.length < 10 || (/^[s\W]*$/).test(format)) {
-      throw new Error(
-        'The warning format should be able to uniquely identify this ' +
-        'warning. Please, use a more descriptive format than: ' + format
-      );
-    }
-
-    if (!condition) {
-      var argIndex = 0;
-      var message = 'Warning: ' +
-        format.replace(/%s/g, function() {
-          return args[argIndex++];
-        });
-      if (typeof console !== 'undefined') {
-        console.error(message);
-      }
-      try {
-        // This error was thrown as a convenience so that you can use this stack
-        // to find the callsite that caused this warning to fire.
-        throw new Error(message);
-      } catch(x) {}
-    }
-  };
-}
-
-module.exports = warning;
-
-}).call(this,require('_process'))
-
-},{"_process":1}],48:[function(require,module,exports){
-"use strict";
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.select = select;
-
-var _react = require("react");
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: "refresh",
-    value: function refresh() {
-      window.location.reload();
-    }
-  }, {
-    key: "getMessage",
-    value: function getMessage() {
-      if (this.props.signedIn) {
-        return interpolate(gettext("You have signed in as %(username)s. Please refresh the page before continuing."), { username: this.props.signedIn.username }, true);
-      } else if (this.props.signedOut) {
-        return interpolate(gettext("%(username)s, you have been signed out. Please refresh the page before continuing."), { username: this.props.user.username }, true);
-      }
-    }
-  }, {
-    key: "getClassName",
-    value: function getClassName() {
-      if (this.props.signedIn || this.props.signedOut) {
-        return "auth-message show";
-      } else {
-        return "auth-message";
-      }
-    }
-  }, {
-    key: "render",
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        "div",
-        { className: this.getClassName() },
-        _react2.default.createElement(
-          "div",
-          { className: "container" },
-          _react2.default.createElement(
-            "p",
-            { className: "lead" },
-            this.getMessage()
-          ),
-          _react2.default.createElement(
-            "p",
-            null,
-            _react2.default.createElement(
-              "button",
-              { type: "button", className: "btn btn-default",
-                onClick: this.refresh },
-              gettext("Reload page")
-            ),
-            " ",
-            _react2.default.createElement(
-              "span",
-              { className: "hidden-xs hidden-sm text-muted" },
-              gettext("or press F5 key.")
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-function select(state) {
-  return {
-    user: state.auth.user,
-    signedIn: state.auth.signedIn,
-    signedOut: state.auth.signedOut
-  };
-}
-
-},{"react":"react"}],49:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var BASE_URL = $('base').attr('href') + 'user-avatar/';
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: 'getSrc',
-    value: function getSrc() {
-      var size = this.props.size || 100; // jshint ignore:line
-      var url = BASE_URL;
-
-      if (this.props.user && this.props.user.id) {
-        // just avatar hash, size and user id
-        url += this.props.user.avatar_hash + '/' + size + '/' + this.props.user.id + '.png';
-      } else {
-        // just append avatar size to file to produce no-avatar placeholder
-        url += size + '.png';
-      }
-
-      return url;
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement('img', { src: this.getSrc(),
-        className: this.props.className || 'user-avatar',
-        title: gettext("User avatar") });
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"react":"react"}],50:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _moment = require('moment');
-
-var _moment2 = _interopRequireDefault(_moment);
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: 'getReasonMessage',
-    value: function getReasonMessage() {
-      /* jshint ignore:start */
-      if (this.props.message.html) {
-        return _react2.default.createElement('div', { className: 'lead',
-          dangerouslySetInnerHTML: { __html: this.props.message.html } });
-      } else {
-        return _react2.default.createElement(
-          'p',
-          { className: 'lead' },
-          this.props.message.plain
-        );
-      }
-      /* jshint ignore:end */
-    }
-  }, {
-    key: 'getExpirationMessage',
-    value: function getExpirationMessage() {
-      if (this.props.expires) {
-        if (this.props.expires.isAfter((0, _moment2.default)())) {
-          return interpolate(gettext("This ban expires %(expires_on)s."), { 'expires_on': this.props.expires.fromNow() }, true);
-        } else {
-          return gettext("This ban has expired.");
-        }
-      } else {
-        return gettext("This ban is permanent.");
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'page page-error page-error-banned' },
-        _react2.default.createElement(
-          'div',
-          { className: 'container' },
-          _react2.default.createElement(
-            'div',
-            { className: 'message-panel' },
-            _react2.default.createElement(
-              'div',
-              { className: 'message-icon' },
-              _react2.default.createElement(
-                'span',
-                { className: 'material-icon' },
-                'highlight_off'
-              )
-            ),
-            _react2.default.createElement(
-              'div',
-              { className: 'message-body' },
-              this.getReasonMessage(),
-              _react2.default.createElement(
-                'p',
-                { className: 'message-footnote' },
-                this.getExpirationMessage()
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"moment":"moment","react":"react"}],51:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _loader = require('./loader');
-
-var _loader2 = _interopRequireDefault(_loader);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-// jshint ignore:line
-
-var Button = function (_React$Component) {
-  _inherits(Button, _React$Component);
-
-  function Button() {
-    _classCallCheck(this, Button);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(Button).apply(this, arguments));
-  }
-
-  _createClass(Button, [{
-    key: 'render',
-    value: function render() {
-      var className = 'btn ' + this.props.className;
-      var disabled = this.props.disabled;
-
-      if (this.props.loading) {
-        className += ' btn-loading';
-        disabled = true;
-      }
-
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'button',
-        { type: this.props.onClick ? 'button' : 'submit',
-          className: className,
-          disabled: disabled,
-          onClick: this.props.onClick },
-        this.props.children,
-        this.props.loading ? _react2.default.createElement(_loader2.default, null) : null
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return Button;
-}(_react2.default.Component);
-
-exports.default = Button;
-
-Button.defaultProps = {
-  className: "btn-default",
-
-  type: "submit",
-
-  loading: false,
-  disabled: false,
-
-  onClick: null
-};
-
-},{"./loader":60,"react":"react"}],52:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _avatar = require('../avatar');
-
-var _avatar2 = _interopRequireDefault(_avatar);
-
-var _button = require('../button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _ajax = require('../../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _snackbar = require('../../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-// jshint ignore:line
-
-var BASE_URL = $('base').attr('href') + 'user-avatar';
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this.cropAvatar = function () {
-      if (_this.state.isLoading) {
-        return false;
-      }
-
-      _this.setState({
-        'isLoading': true
-      });
-
-      var avatarType = _this.props.upload ? 'crop_tmp' : 'crop_org';
-      var cropit = $('.crop-form');
-
-      _ajax2.default.post(_this.props.user.api_url.avatar, {
-        'avatar': avatarType,
-        'crop': {
-          'offset': cropit.cropit('offset'),
-          'zoom': cropit.cropit('zoom')
-        }
-      }).then(function (data) {
-        _this.props.onComplete(data.avatar_hash, data.options);
-        _snackbar2.default.success(data.detail);
-      }, function (rejection) {
-        if (rejection.status === 400) {
-          _snackbar2.default.error(rejection.detail);
-          _this.setState({
-            'isLoading': false
-          });
-        } else {
-          _this.props.showError(rejection);
-        }
-      });
-    };
-
-    _this.state = {
-      'isLoading': false
-    };
-    return _this;
-  }
-
-  _createClass(_class, [{
-    key: 'getAvatarSize',
-    value: function getAvatarSize() {
-      if (this.props.upload) {
-        return this.props.options.crop_tmp.size;
-      } else {
-        return this.props.options.crop_org.size;
-      }
-    }
-  }, {
-    key: 'getAvatarSecret',
-    value: function getAvatarSecret() {
-      if (this.props.upload) {
-        return this.props.options.crop_tmp.secret;
-      } else {
-        return this.props.options.crop_org.secret;
-      }
-    }
-  }, {
-    key: 'getAvatarHash',
-    value: function getAvatarHash() {
-      return this.props.upload || this.props.user.avatar_hash;
-    }
-  }, {
-    key: 'getImagePath',
-    value: function getImagePath() {
-      return [BASE_URL, this.getAvatarSecret() + ':' + this.getAvatarHash(), this.props.user.id + '.png'].join('/');
-    }
-  }, {
-    key: 'componentDidMount',
-    value: function componentDidMount() {
-      var _this2 = this;
-
-      var cropit = $('.crop-form');
-      cropit.width(this.getAvatarSize());
-
-      cropit.cropit({
-        'width': this.getAvatarSize(),
-        'height': this.getAvatarSize(),
-        'imageState': {
-          'src': this.getImagePath()
-        },
-        onImageLoaded: function onImageLoaded() {
-          if (_this2.props.upload) {
-            // center uploaded image
-            var zoomLevel = cropit.cropit('zoom');
-            var imageSize = cropit.cropit('imageSize');
-
-            // is it wider than taller?
-            if (imageSize.width > imageSize.height) {
-              var displayedWidth = imageSize.width * zoomLevel;
-              var offsetX = (displayedWidth - _this2.getAvatarSize()) / -2;
-
-              cropit.cropit('offset', {
-                'x': offsetX,
-                'y': 0
-              });
-            } else if (imageSize.width < imageSize.height) {
-              var displayedHeight = imageSize.height * zoomLevel;
-              var offsetY = (displayedHeight - _this2.getAvatarSize()) / -2;
-
-              cropit.cropit('offset', {
-                'x': 0,
-                'y': offsetY
-              });
-            }
-          } else {
-            // use preserved crop
-            var crop = _this2.props.options.crop_org.crop;
-            if (crop) {
-              cropit.cropit('zoom', crop.zoom);
-              cropit.cropit('offset', {
-                'x': crop.x,
-                'y': crop.y
-              });
-            }
-          }
-        }
-      });
-    }
-  }, {
-    key: 'componentWillUnmount',
-    value: function componentWillUnmount() {
-      $('.crop-form').cropit('disable');
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: 'render',
-
-    /* jshint ignore:end */
-
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        null,
-        _react2.default.createElement(
-          'div',
-          { className: 'modal-body modal-avatar-crop' },
-          _react2.default.createElement(
-            'div',
-            { className: 'crop-form' },
-            _react2.default.createElement('div', { className: 'cropit-image-preview' }),
-            _react2.default.createElement('input', { type: 'range', className: 'cropit-image-zoom-input' })
-          )
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'modal-footer' },
-          _react2.default.createElement(
-            'div',
-            { className: 'col-md-6 col-md-offset-3' },
-            _react2.default.createElement(
-              _button2.default,
-              { onClick: this.cropAvatar,
-                loading: this.state.isLoading,
-                className: 'btn-primary btn-block' },
-              this.props.upload ? gettext("Set avatar") : gettext("Crop image")
-            ),
-            _react2.default.createElement(
-              _button2.default,
-              { onClick: this.props.showIndex,
-                disabled: this.state.isLoading,
-                className: 'btn-default btn-block' },
-              gettext("Cancel")
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../../services/ajax":91,"../../services/snackbar":99,"../avatar":49,"../button":51,"react":"react"}],53:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.Gallery = exports.GalleryItem = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _button = require('../button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _index = require('../../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _ajax = require('../../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _snackbar = require('../../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _batch = require('../../utils/batch');
-
-var _batch2 = _interopRequireDefault(_batch);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-// jshint ignore:line
-
-var GalleryItem = exports.GalleryItem = function (_React$Component) {
-  _inherits(GalleryItem, _React$Component);
-
-  function GalleryItem() {
-    var _Object$getPrototypeO;
-
-    var _temp, _this, _ret;
-
-    _classCallCheck(this, GalleryItem);
-
-    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(GalleryItem)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.select = function () {
-      _this.props.select(_this.props.image);
-    }, _temp), _possibleConstructorReturn(_this, _ret);
-  }
-  /* jshint ignore:start */
-
-  _createClass(GalleryItem, [{
-    key: 'getClassName',
-
-    /* jshint ignore:end */
-
-    value: function getClassName() {
-      if (this.props.selection === this.props.image) {
-        if (this.props.disabled) {
-          return 'btn btn-avatar btn-disabled avatar-selected';
-        } else {
-          return 'btn btn-avatar avatar-selected';
-        }
-      } else if (this.props.disabled) {
-        return 'btn btn-avatar btn-disabled';
-      } else {
-        return 'btn btn-avatar';
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'button',
-        { type: 'button',
-          className: this.getClassName(),
-          disabled: this.props.disabled,
-          onClick: this.select },
-        _react2.default.createElement('img', { src: _index2.default.get('MEDIA_URL') + this.props.image })
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return GalleryItem;
-}(_react2.default.Component);
-
-var Gallery = exports.Gallery = function (_React$Component2) {
-  _inherits(Gallery, _React$Component2);
-
-  function Gallery() {
-    _classCallCheck(this, Gallery);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(Gallery).apply(this, arguments));
-  }
-
-  _createClass(Gallery, [{
-    key: 'render',
-    value: function render() {
-      var _this3 = this;
-
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'avatars-gallery' },
-        _react2.default.createElement(
-          'h3',
-          null,
-          this.props.name
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'avatars-gallery-images' },
-          (0, _batch2.default)(this.props.images, 4, null).map(function (row, i) {
-            return _react2.default.createElement(
-              'div',
-              { className: 'row', key: i },
-              row.map(function (item, i) {
-                return _react2.default.createElement(
-                  'div',
-                  { className: 'col-xs-3', key: i },
-                  item ? _react2.default.createElement(GalleryItem, { image: item,
-                    disabled: _this3.props.disabled,
-                    select: _this3.props.select,
-                    selection: _this3.props.selection }) : _react2.default.createElement('div', { className: 'blank-avatar' })
-                );
-              })
-            );
-          })
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return Gallery;
-}(_react2.default.Component);
-
-var _class = function (_React$Component3) {
-  _inherits(_class, _React$Component3);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this4.select = function (image) {
-      _this4.setState({
-        selection: image
-      });
-    };
-
-    _this4.save = function () {
-      if (_this4.state.isLoading) {
-        return false;
-      }
-
-      _this4.setState({
-        'isLoading': true
-      });
-
-      _ajax2.default.post(_this4.props.user.api_url.avatar, {
-        avatar: 'galleries',
-        image: _this4.state.selection
-      }).then(function (response) {
-        _this4.setState({
-          'isLoading': false
-        });
-
-        _snackbar2.default.success(response.detail);
-        _this4.props.onComplete(response.avatar_hash, response.options);
-      }, function (rejection) {
-        if (rejection.status === 400) {
-          _snackbar2.default.error(rejection.detail);
-          _this4.setState({
-            'isLoading': false
-          });
-        } else {
-          _this4.props.showError(rejection);
-        }
-      });
-    };
-
-    _this4.state = {
-      'selection': null,
-      'isLoading': false
-    };
-    return _this4;
-  }
-
-  /* jshint ignore:start */
-
-  _createClass(_class, [{
-    key: 'render',
-
-    /* jshint ignore:end */
-
-    value: function render() {
-      var _this5 = this;
-
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        null,
-        _react2.default.createElement(
-          'div',
-          { className: 'modal-body modal-avatar-gallery' },
-          this.props.options.galleries.map(function (item, i) {
-            return _react2.default.createElement(Gallery, { name: item.name,
-              images: item.images,
-              selection: _this5.state.selection,
-              disabled: _this5.state.isLoading,
-              select: _this5.select,
-              key: i });
-          })
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'modal-footer' },
-          _react2.default.createElement(
-            'div',
-            { className: 'row' },
-            _react2.default.createElement(
-              'div',
-              { className: 'col-md-6 col-md-offset-3' },
-              _react2.default.createElement(
-                _button2.default,
-                { onClick: this.save,
-                  loading: this.state.isLoading,
-                  disabled: !this.state.selection,
-                  className: 'btn-primary btn-block' },
-                this.state.selection ? gettext("Save choice") : gettext("Select avatar")
-              ),
-              _react2.default.createElement(
-                _button2.default,
-                { onClick: this.props.showIndex,
-                  disabled: this.state.isLoading,
-                  className: 'btn-default btn-block' },
-                gettext("Cancel")
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../../index":85,"../../services/ajax":91,"../../services/snackbar":99,"../../utils/batch":103,"../button":51,"react":"react"}],54:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _avatar = require('../avatar');
-
-var _avatar2 = _interopRequireDefault(_avatar);
-
-var _button = require('../button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _loader = require('../loader');
-
-var _loader2 = _interopRequireDefault(_loader);
-
-var _ajax = require('../../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _snackbar = require('../../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this.setGravatar = function () {
-      _this.callApi('gravatar');
-    };
-
-    _this.setGenerated = function () {
-      _this.callApi('generated');
-    };
-
-    _this.state = {
-      'isLoading': false
-    };
-    return _this;
-  }
-
-  _createClass(_class, [{
-    key: 'callApi',
-    value: function callApi(avatarType) {
-      var _this2 = this;
-
-      if (this.state.isLoading) {
-        return false;
-      }
-
-      this.setState({
-        'isLoading': true
-      });
-
-      _ajax2.default.post(this.props.user.api_url.avatar, {
-        avatar: avatarType
-      }).then(function (response) {
-        _this2.setState({
-          'isLoading': false
-        });
-
-        _snackbar2.default.success(response.detail);
-        _this2.props.onComplete(response.avatar_hash, response.options);
-      }, function (rejection) {
-        if (rejection.status === 400) {
-          _snackbar2.default.error(rejection.detail);
-          _this2.setState({
-            'isLoading': false
-          });
-        } else {
-          _this2.props.showError(rejection);
-        }
-      });
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: 'getGravatarButton',
-
-    /* jshint ignore:end */
-
-    value: function getGravatarButton() {
-      if (this.props.options.gravatar) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          _button2.default,
-          { onClick: this.setGravatar,
-            disabled: this.state.isLoading,
-            className: 'btn-default btn-block btn-avatar-gravatar' },
-          gettext("Download my Gravatar")
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'getCropButton',
-    value: function getCropButton() {
-      if (this.props.options.crop_org) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          _button2.default,
-          { onClick: this.props.showCrop,
-            disabled: this.state.isLoading,
-            className: 'btn-default btn-block btn-avatar-crop' },
-          gettext("Re-crop uploaded image")
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'getUploadButton',
-    value: function getUploadButton() {
-      if (this.props.options.upload) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          _button2.default,
-          { onClick: this.props.showUpload,
-            disabled: this.state.isLoading,
-            className: 'btn-default btn-block btn-avatar-upload' },
-          gettext("Upload new image")
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'getGalleryButton',
-    value: function getGalleryButton() {
-      if (this.props.options.galleries) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          _button2.default,
-          { onClick: this.props.showGallery,
-            disabled: this.state.isLoading,
-            className: 'btn-default btn-block btn-avatar-gallery' },
-          gettext("Pick avatar from gallery")
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'getAvatarPreview',
-    value: function getAvatarPreview() {
-      if (this.state.isLoading) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'div',
-          { className: 'avatar-preview preview-loading' },
-          _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '200' }),
-          _react2.default.createElement(_loader2.default, null)
-        );
-        /* jshint ignore:end */
-      } else {
-          /* jshint ignore:start */
-          return _react2.default.createElement(
-            'div',
-            { className: 'avatar-preview' },
-            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '200' })
-          );
-          /* jshint ignore:end */
-        }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'modal-body modal-avatar-index' },
-        _react2.default.createElement(
-          'div',
-          { className: 'row' },
-          _react2.default.createElement(
-            'div',
-            { className: 'col-md-5' },
-            this.getAvatarPreview()
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'col-md-7' },
-            this.getGravatarButton(),
-            _react2.default.createElement(
-              _button2.default,
-              { onClick: this.setGenerated,
-                disabled: this.state.isLoading,
-                className: 'btn-default btn-block btn-avatar-generate' },
-              gettext("Generate my individual avatar")
-            ),
-            this.getCropButton(),
-            this.getUploadButton(),
-            this.getGalleryButton()
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../../services/ajax":91,"../../services/snackbar":99,"../avatar":49,"../button":51,"../loader":60,"react":"react"}],55:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.ChangeAvatarError = undefined;
-exports.select = select;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _index = require('./index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _crop = require('./crop');
-
-var _crop2 = _interopRequireDefault(_crop);
-
-var _upload = require('./upload');
-
-var _upload2 = _interopRequireDefault(_upload);
-
-var _gallery = require('./gallery');
-
-var _gallery2 = _interopRequireDefault(_gallery);
-
-var _modalLoader = require('../modal-loader');
-
-var _modalLoader2 = _interopRequireDefault(_modalLoader);
-
-var _users = require('../../reducers/users');
-
-var _ajax = require('../../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _store = require('../../services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-// jshint ignore:line
-
-var ChangeAvatarError = exports.ChangeAvatarError = function (_React$Component) {
-  _inherits(ChangeAvatarError, _React$Component);
-
-  function ChangeAvatarError() {
-    _classCallCheck(this, ChangeAvatarError);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeAvatarError).apply(this, arguments));
-  }
-
-  _createClass(ChangeAvatarError, [{
-    key: 'getErrorReason',
-    value: function getErrorReason() {
-      if (this.props.reason) {
-        /* jshint ignore:start */
-        return _react2.default.createElement('p', { dangerouslySetInnerHTML: { __html: this.props.reason } });
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'modal-body' },
-        _react2.default.createElement(
-          'div',
-          { className: 'message-icon' },
-          _react2.default.createElement(
-            'span',
-            { className: 'material-icon' },
-            'remove_circle_outline'
-          )
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'message-body' },
-          _react2.default.createElement(
-            'p',
-            { className: 'lead' },
-            this.props.message
-          ),
-          this.getErrorReason()
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ChangeAvatarError;
-}(_react2.default.Component);
-
-var _class = function (_React$Component2) {
-  _inherits(_class, _React$Component2);
-
-  function _class() {
-    var _Object$getPrototypeO;
-
-    var _temp, _this2, _ret;
-
-    _classCallCheck(this, _class);
-
-    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    return _ret = (_temp = (_this2 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.showError = function (error) {
-      _this2.setState({
-        error: error
-      });
-    }, _this2.showIndex = function () {
-      _this2.setState({
-        'component': _index2.default
-      });
-    }, _this2.showUpload = function () {
-      _this2.setState({
-        'component': _upload2.default
-      });
-    }, _this2.showCrop = function () {
-      _this2.setState({
-        'component': _crop2.default
-      });
-    }, _this2.showGallery = function () {
-      _this2.setState({
-        'component': _gallery2.default
-      });
-    }, _this2.completeFlow = function (avatarHash, options) {
-      _store2.default.dispatch((0, _users.updateAvatar)(_this2.props.user, avatarHash));
-
-      _this2.setState({
-        'component': _index2.default,
-        options: options
-      });
-    }, _temp), _possibleConstructorReturn(_this2, _ret);
-  }
-
-  _createClass(_class, [{
-    key: 'componentDidMount',
-    value: function componentDidMount() {
-      var _this3 = this;
-
-      _ajax2.default.get(this.props.user.api_url.avatar).then(function (options) {
-        _this3.setState({
-          'component': _index2.default,
-          'options': options,
-          'error': null
-        });
-      }, function (rejection) {
-        _this3.showError(rejection);
-      });
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: 'getBody',
-
-    /* jshint ignore:end */
-
-    value: function getBody() {
-      if (this.state) {
-        if (this.state.error) {
-          /* jshint ignore:start */
-          return _react2.default.createElement(ChangeAvatarError, { message: this.state.error.detail,
-            reason: this.state.error.reason });
-          /* jshint ignore:end */
-        } else {
-            /* jshint ignore:start */
-            return _react2.default.createElement(this.state.component, { options: this.state.options,
-              user: this.props.user,
-              onComplete: this.completeFlow,
-              showError: this.showError,
-              showIndex: this.showIndex,
-              showCrop: this.showCrop,
-              showUpload: this.showUpload,
-              showGallery: this.showGallery });
-            /* jshint ignore:end */
-          }
-      } else {
-          /* jshint ignore:start */
-          return _react2.default.createElement(_modalLoader2.default, null);
-          /* jshint ignore:end */
-        }
-    }
-  }, {
-    key: 'getClassName',
-    value: function getClassName() {
-      if (this.state && this.state.error) {
-        return "modal-dialog modal-message modal-change-avatar";
-      } else {
-        return "modal-dialog modal-change-avatar";
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: this.getClassName(),
-          role: 'document' },
-        _react2.default.createElement(
-          'div',
-          { className: 'modal-content' },
-          _react2.default.createElement(
-            'div',
-            { className: 'modal-header' },
-            _react2.default.createElement(
-              'button',
-              { type: 'button', className: 'close', 'data-dismiss': 'modal',
-                'aria-label': gettext("Close") },
-              _react2.default.createElement(
-                'span',
-                { 'aria-hidden': 'true' },
-                '×'
-              )
-            ),
-            _react2.default.createElement(
-              'h4',
-              { className: 'modal-title' },
-              gettext("Change your avatar")
-            )
-          ),
-          this.getBody()
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-function select(state) {
-  return {
-    'user': state.auth.user
-  };
-}
-
-},{"../../reducers/users":90,"../../services/ajax":91,"../../services/store":100,"../modal-loader":61,"./crop":52,"./gallery":53,"./index":54,"./upload":56,"react":"react"}],56:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _crop = require('./crop');
-
-var _crop2 = _interopRequireDefault(_crop);
-
-var _button = require('../button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _ajax = require('../../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _snackbar = require('../../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _fileSize = require('../../utils/file-size');
-
-var _fileSize2 = _interopRequireDefault(_fileSize);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this.pickFile = function () {
-      document.getElementById('avatar-hidden-upload').click();
-    };
-
-    _this.uploadFile = function () {
-      var image = document.getElementById('avatar-hidden-upload').files[0];
-
-      var validationError = _this.validateFile(image);
-      if (validationError) {
-        _snackbar2.default.error(validationError);
-        return;
-      }
-
-      _this.setState({
-        image: image,
-        'preview': URL.createObjectURL(image),
-        'progress': 0
-      });
-
-      var data = new FormData();
-      data.append('avatar', 'upload');
-      data.append('image', image);
-
-      _ajax2.default.upload(_this.props.user.api_url.avatar, data, function (progress) {
-        _this.setState({
-          progress: progress
-        });
-      }).then(function (data) {
-        _this.setState({
-          'options': data.options,
-          'uploaded': data.detail
-        });
-        _snackbar2.default.info(gettext("Your image has been uploaded and you may now crop it."));
-      }, function (rejection) {
-        if (rejection.status === 400) {
-          _snackbar2.default.error(rejection.detail);
-          _this.setState({
-            'isLoading': false,
-            'image': null,
-            'progress': 0
-          });
-        } else {
-          _this.props.showError(rejection);
-        }
-      });
-    };
-
-    _this.state = {
-      'image': null,
-      'preview': null,
-      'progress': 0,
-      'uploaded': null
-    };
-    return _this;
-  }
-
-  _createClass(_class, [{
-    key: 'validateFile',
-    value: function validateFile(image) {
-      if (image.size > this.props.options.upload.limit) {
-        return interpolate(gettext("Selected file is too big. (%(filesize)s)"), {
-          'filesize': (0, _fileSize2.default)(image.size)
-        }, true);
-      }
-
-      var invalidTypeMsg = gettext("Selected file type is not supported.");
-      if (this.props.options.upload.allowed_mime_types.indexOf(image.type) === -1) {
-        return invalidTypeMsg;
-      }
-
-      var extensionFound = false;
-      var loweredFilename = image.name.toLowerCase();
-      this.props.options.upload.allowed_extensions.map(function (extension) {
-        if (loweredFilename.substr(extension.length * -1) === extension) {
-          extensionFound = true;
-        }
-      });
-
-      if (!extensionFound) {
-        return invalidTypeMsg;
-      }
-
-      return false;
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: 'getUploadRequirements',
-
-    /* jshint ignore:end */
-
-    value: function getUploadRequirements(options) {
-      var extensions = options.allowed_extensions.map(function (extension) {
-        return extension.substr(1);
-      });
-
-      return interpolate(gettext("%(files)s files smaller than %(limit)s"), {
-        'files': extensions.join(', '),
-        'limit': (0, _fileSize2.default)(options.limit)
-      }, true);
-    }
-  }, {
-    key: 'getUploadButton',
-    value: function getUploadButton() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'modal-body modal-avatar-upload' },
-        _react2.default.createElement(
-          _button2.default,
-          { className: 'btn-pick-file',
-            onClick: this.pickFile },
-          _react2.default.createElement(
-            'div',
-            { className: 'material-icon' },
-            'input'
-          ),
-          gettext("Select file")
-        ),
-        _react2.default.createElement(
-          'p',
-          { className: 'text-muted' },
-          this.getUploadRequirements(this.props.options.upload)
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }, {
-    key: 'getUploadProgressLabel',
-    value: function getUploadProgressLabel() {
-      return interpolate(gettext("%(progress)s % complete"), {
-        'progress': this.state.progress
-      }, true);
-    }
-  }, {
-    key: 'getUploadProgress',
-    value: function getUploadProgress() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'modal-body modal-avatar-upload' },
-        _react2.default.createElement(
-          'div',
-          { className: 'upload-progress' },
-          _react2.default.createElement('img', { src: this.state.preview }),
-          _react2.default.createElement(
-            'div',
-            { className: 'progress' },
-            _react2.default.createElement(
-              'div',
-              { className: 'progress-bar', role: 'progressbar',
-                'aria-valuenow': '{this.state.progress}',
-                'aria-valuemin': '0', 'aria-valuemax': '100',
-                style: { width: this.state.progress + '%' } },
-              _react2.default.createElement(
-                'span',
-                { className: 'sr-only' },
-                this.getUploadProgressLabel()
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }, {
-    key: 'renderUpload',
-    value: function renderUpload() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        null,
-        _react2.default.createElement('input', { type: 'file',
-          id: 'avatar-hidden-upload',
-          className: 'hidden-file-upload',
-          onChange: this.uploadFile }),
-        this.state.image ? this.getUploadProgress() : this.getUploadButton(),
-        _react2.default.createElement(
-          'div',
-          { className: 'modal-footer' },
-          _react2.default.createElement(
-            'div',
-            { className: 'col-md-6 col-md-offset-3' },
-            _react2.default.createElement(
-              _button2.default,
-              { onClick: this.props.showIndex,
-                disabled: !!this.state.image,
-                className: 'btn-default btn-block' },
-              gettext("Cancel")
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }, {
-    key: 'renderCrop',
-    value: function renderCrop() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(_crop2.default, { options: this.state.options,
-        user: this.props.user,
-        upload: this.state.uploaded,
-        onComplete: this.props.onComplete,
-        showError: this.props.showError,
-        showIndex: this.props.showIndex });
-      /* jshint ignore:end */
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return this.state.uploaded ? this.renderCrop() : this.renderUpload();
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../../services/ajax":91,"../../services/snackbar":99,"../../utils/file-size":104,"../button":51,"./crop":52,"react":"react"}],57:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: 'isValidated',
-    value: function isValidated() {
-      return typeof this.props.validation !== "undefined";
-    }
-  }, {
-    key: 'getClassName',
-    value: function getClassName() {
-      var className = 'form-group';
-      if (this.isValidated()) {
-        className += ' has-feedback';
-        if (this.props.validation === null) {
-          className += ' has-success';
-        } else {
-          className += ' has-error';
-        }
-      }
-      return className;
-    }
-  }, {
-    key: 'getFeedback',
-    value: function getFeedback() {
-      var _this2 = this;
-
-      if (this.props.validation) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'div',
-          { className: 'help-block errors' },
-          this.props.validation.map(function (error, i) {
-            return _react2.default.createElement(
-              'p',
-              { key: _this2.props.for + 'FeedbackItem' + i },
-              error
-            );
-          })
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'getFeedbackIcon',
-    value: function getFeedbackIcon() {
-      if (this.isValidated()) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'span',
-          { className: 'material-icon form-control-feedback',
-            'aria-hidden': 'true', key: this.props.for + 'FeedbackIcon' },
-          this.props.validation ? 'clear' : 'check'
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'getFeedbackDescription',
-    value: function getFeedbackDescription() {
-      if (this.isValidated()) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'span',
-          { id: this.props.for + '_status', className: 'sr-only' },
-          this.props.validation ? gettext('(error)') : gettext('(success)')
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'getHelpText',
-    value: function getHelpText() {
-      if (this.props.helpText) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'p',
-          { className: 'help-block' },
-          this.props.helpText
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: this.getClassName() },
-        _react2.default.createElement(
-          'label',
-          { className: 'control-label ' + (this.props.labelClass || ''),
-            htmlFor: this.props.for || '' },
-          this.props.label + ':'
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: this.props.controlClass || '' },
-          this.props.children,
-          this.getFeedbackIcon(),
-          this.getFeedbackDescription(),
-          this.getFeedback(),
-          this.getHelpText(),
-          this.props.extra || null
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"react":"react"}],58:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _validators = require('../utils/validators');
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var validateRequired = (0, _validators.required)();
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    var _Object$getPrototypeO;
-
-    var _temp, _this, _ret;
-
-    _classCallCheck(this, _class);
-
-    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.bindInput = function (name) {
-      return function (event) {
-        var newState = _defineProperty({}, name, event.target.value);
-
-        var formErrors = _this.state.errors || {};
-        formErrors[name] = _this.validateField(name, newState[name]);
-        newState.errors = formErrors;
-
-        _this.setState(newState);
-      };
-    }, _this.handleSubmit = function (event) {
-      // we don't reload page on submissions
-      event.preventDefault();
-      if (_this.state.isLoading) {
-        return;
-      }
-
-      if (_this.clean()) {
-        _this.setState({ isLoading: true });
-        var promise = _this.send();
-
-        if (promise) {
-          promise.then(function (success) {
-            _this.setState({ isLoading: false });
-            _this.handleSuccess(success);
-          }, function (rejection) {
-            _this.setState({ isLoading: false });
-            _this.handleError(rejection);
-          });
-        } else {
-          _this.setState({ isLoading: false });
-        }
-      }
-    }, _temp), _possibleConstructorReturn(_this, _ret);
-  }
-
-  _createClass(_class, [{
-    key: 'validate',
-    value: function validate() {
-      var errors = {};
-      if (!this.state.validators) {
-        return errors;
-      }
-
-      var validators = {
-        required: this.state.validators.required || this.state.validators,
-        optional: this.state.validators.optional || {}
-      };
-
-      var validatedFields = [];
-
-      // add required fields to validation
-      for (var name in validators.required) {
-        if (validators.required.hasOwnProperty(name) && validators.required[name]) {
-          validatedFields.push(name);
-        }
-      }
-
-      // add optional fields to validation
-      for (var name in validators.optional) {
-        if (validators.optional.hasOwnProperty(name) && validators.optional[name]) {
-          validatedFields.push(name);
-        }
-      }
-
-      // validate fields values
-      for (var i in validatedFields) {
-        var name = validatedFields[i];
-        var fieldErrors = this.validateField(name, this.state[name]);
-
-        if (fieldErrors === null) {
-          errors[name] = null;
-        } else if (fieldErrors) {
-          errors[name] = fieldErrors;
-        }
-      }
-
-      return errors;
-    }
-  }, {
-    key: 'isValid',
-    value: function isValid() {
-      var errors = this.validate();
-      for (var field in errors) {
-        if (errors.hasOwnProperty(field)) {
-          if (errors[field] !== null) {
-            return false;
-          }
-        }
-      }
-
-      return true;
-    }
-  }, {
-    key: 'validateField',
-    value: function validateField(name, value) {
-      var errors = [];
-      if (!this.state.validators) {
-        return errors;
-      }
-
-      var validators = {
-        required: (this.state.validators.required || this.state.validators)[name],
-        optional: (this.state.validators.optional || {})[name]
-      };
-
-      var requiredError = validateRequired(value) || false;
-
-      if (validators.required) {
-        if (requiredError) {
-          errors = [requiredError];
-        } else {
-          for (var i in validators.required) {
-            var validationError = validators.required[i](value);
-            if (validationError) {
-              errors.push(validationError);
-            }
-          }
-        }
-
-        return errors.length ? errors : null;
-      } else if (requiredError === false && validators.optional) {
-        for (var i in validators.optional) {
-          var validationError = validators.optional[i](value);
-          if (validationError) {
-            errors.push(validationError);
-          }
-        }
-
-        return errors.length ? errors : null;
-      }
-
-      return false; // false === field wasn't validated
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: 'clean',
-    value: function clean() {
-      return true;
-    }
-  }, {
-    key: 'send',
-    value: function send() {
-      return null;
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess(success) {
-      return;
-    }
-  }, {
-    key: 'handleError',
-
-    /* jshint ignore:end */
-    value: function handleError(rejection) {
-      return;
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../utils/validators":109,"react":"react"}],59:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: 'isActive',
-    value: function isActive() {
-      if (this.props.path) {
-        return document.location.pathname.indexOf(this.props.path) === 0;
-      } else {
-        return false;
-      }
-    }
-  }, {
-    key: 'getClassName',
-    value: function getClassName() {
-      if (this.isActive()) {
-        return (this.props.className || '') + ' ' + (this.props.activeClassName || 'active');
-      } else {
-        return this.props.className || '';
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      // jshint ignore:start
-      return _react2.default.createElement(
-        'li',
-        { className: this.getClassName() },
-        this.props.children
-      );
-      // jshint ignore:end
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"react":"react"}],60:[function(require,module,exports){
-"use strict";
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require("react");
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: "render",
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        "div",
-        { className: this.props.className || "loader" },
-        _react2.default.createElement("div", { className: "loader-spinning-wheel" })
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"react":"react"}],61:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _loader = require('./loader');
-
-var _loader2 = _interopRequireDefault(_loader);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-// jshint ignore:line
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'modal-body modal-loader' },
-        _react2.default.createElement(_loader2.default, null)
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"./loader":60,"react":"react"}],62:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.UsernameHistory = exports.ChangeUsernameLoading = exports.NoChangesLeft = exports.ChangeUsername = undefined;
-
-var _moment = require('moment');
-
-var _moment2 = _interopRequireDefault(_moment);
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _avatar = require('../avatar');
-
-var _avatar2 = _interopRequireDefault(_avatar);
-
-var _button = require('../button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _form = require('../form');
-
-var _form2 = _interopRequireDefault(_form);
-
-var _formGroup = require('../form-group');
-
-var _formGroup2 = _interopRequireDefault(_formGroup);
-
-var _loader = require('../loader');
-
-var _loader2 = _interopRequireDefault(_loader);
-
-var _index = require('../../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _usernameHistory = require('../../reducers/username-history');
-
-var _users = require('../../reducers/users');
-
-var _ajax = require('../../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _pageTitle = require('../../services/page-title');
-
-var _pageTitle2 = _interopRequireDefault(_pageTitle);
-
-var _snackbar = require('../../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _store = require('../../services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-var _random = require('../../utils/random');
-
-var random = _interopRequireWildcard(_random);
-
-var _validators = require('../../utils/validators');
-
-var validators = _interopRequireWildcard(_validators);
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-var ChangeUsername = exports.ChangeUsername = function (_Form) {
-  _inherits(ChangeUsername, _Form);
-
-  function ChangeUsername(props) {
-    _classCallCheck(this, ChangeUsername);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeUsername).call(this, props));
-
-    _this.state = {
-      username: '',
-
-      validators: {
-        username: [validators.usernameContent(), validators.usernameMinLength({
-          username_length_min: props.options.length_min
-        }), validators.usernameMaxLength({
-          username_length_max: props.options.length_max
-        })]
-      },
-
-      isLoading: false
-    };
-    return _this;
-  }
-
-  _createClass(ChangeUsername, [{
-    key: 'getHelpText',
-    value: function getHelpText() {
-      var phrases = [];
-
-      if (this.props.options.changes_left > 0) {
-        var message = ngettext("You can change your username %(changes_left)s more time.", "You can change your username %(changes_left)s more times.", this.props.options.changes_left);
-
-        phrases.push(interpolate(message, {
-          'changes_left': this.props.options.changes_left
-        }, true));
-      }
-
-      if (this.props.user.acl.name_changes_expire > 0) {
-        var message = ngettext("Used changes redeem after %(name_changes_expire)s day.", "Used changes redeem after %(name_changes_expire)s days.", this.props.user.acl.name_changes_expire);
-
-        phrases.push(interpolate(message, {
-          'name_changes_expire': this.props.user.acl.name_changes_expire
-        }, true));
-      }
-
-      return phrases.length ? phrases.join(' ') : null;
-    }
-  }, {
-    key: 'clean',
-    value: function clean() {
-      var errors = this.validate();
-      if (errors.username) {
-        _snackbar2.default.error(errors.username[0]);
-        return false;
-      }if (this.state.username.trim() === this.props.user.username) {
-        _snackbar2.default.info(gettext("Your new username is same as current one."));
-        return false;
-      } else {
-        return true;
-      }
-    }
-  }, {
-    key: 'send',
-    value: function send() {
-      return _ajax2.default.post(this.props.user.api_url.username, {
-        'username': this.state.username
-      });
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess(success) {
-      this.setState({
-        'username': ''
-      });
-
-      this.props.complete(success.username, success.slug, success.options);
-    }
-  }, {
-    key: 'handleError',
-    value: function handleError(rejection) {
-      _snackbar2.default.apiError(rejection);
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'form',
-        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
-        _react2.default.createElement(
-          'div',
-          { className: 'panel panel-default panel-form' },
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-heading' },
-            _react2.default.createElement(
-              'h3',
-              { className: 'panel-title' },
-              gettext("Change username")
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-body' },
-            _react2.default.createElement(
-              _formGroup2.default,
-              { label: gettext("New username"), 'for': 'id_username',
-                labelClass: 'col-sm-4', controlClass: 'col-sm-8',
-                helpText: this.getHelpText() },
-              _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',
-                disabled: this.state.isLoading,
-                onChange: this.bindInput('username'),
-                value: this.state.username })
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-footer' },
-            _react2.default.createElement(
-              'div',
-              { className: 'row' },
-              _react2.default.createElement(
-                'div',
-                { className: 'col-sm-8 col-sm-offset-4' },
-                _react2.default.createElement(
-                  _button2.default,
-                  { className: 'btn-primary', loading: this.state.isLoading },
-                  gettext("Change username")
-                )
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ChangeUsername;
-}(_form2.default);
-
-var NoChangesLeft = exports.NoChangesLeft = function (_React$Component) {
-  _inherits(NoChangesLeft, _React$Component);
-
-  function NoChangesLeft() {
-    _classCallCheck(this, NoChangesLeft);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoChangesLeft).apply(this, arguments));
-  }
-
-  _createClass(NoChangesLeft, [{
-    key: 'getHelpText',
-    value: function getHelpText() {
-      if (this.props.options.next_on) {
-        return interpolate(gettext("You will be able to change your username %(next_change)s."), { 'next_change': this.props.options.next_on.fromNow() }, true);
-      } else {
-        return gettext("You have used up available name changes.");
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'panel panel-default panel-form' },
-        _react2.default.createElement(
-          'div',
-          { className: 'panel-heading' },
-          _react2.default.createElement(
-            'h3',
-            { className: 'panel-title' },
-            gettext("Change username")
-          )
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'panel-body panel-message-body' },
-          _react2.default.createElement(
-            'div',
-            { className: 'message-icon' },
-            _react2.default.createElement(
-              'span',
-              { className: 'material-icon' },
-              'info_outline'
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'message-body' },
-            _react2.default.createElement(
-              'p',
-              { className: 'lead' },
-              gettext("You can't change your username at the moment.")
-            ),
-            _react2.default.createElement(
-              'p',
-              { className: 'help-block' },
-              this.getHelpText()
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return NoChangesLeft;
-}(_react2.default.Component);
-
-var ChangeUsernameLoading = exports.ChangeUsernameLoading = function (_React$Component2) {
-  _inherits(ChangeUsernameLoading, _React$Component2);
-
-  function ChangeUsernameLoading() {
-    _classCallCheck(this, ChangeUsernameLoading);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeUsernameLoading).apply(this, arguments));
-  }
-
-  _createClass(ChangeUsernameLoading, [{
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'panel panel-default panel-form' },
-        _react2.default.createElement(
-          'div',
-          { className: 'panel-heading' },
-          _react2.default.createElement(
-            'h3',
-            { className: 'panel-title' },
-            gettext("Change username")
-          )
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'panel-body panel-body-loading' },
-          _react2.default.createElement(_loader2.default, { className: 'loader loader-spaced' })
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ChangeUsernameLoading;
-}(_react2.default.Component);
-
-var UsernameHistory = exports.UsernameHistory = function (_React$Component3) {
-  _inherits(UsernameHistory, _React$Component3);
-
-  function UsernameHistory() {
-    _classCallCheck(this, UsernameHistory);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(UsernameHistory).apply(this, arguments));
-  }
-
-  _createClass(UsernameHistory, [{
-    key: 'renderUserAvatar',
-    value: function renderUserAvatar(item) {
-      if (item.changed_by) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'a',
-          { href: item.changed_by.absolute_url, className: 'user-avatar' },
-          _react2.default.createElement(_avatar2.default, { user: item.changed_by, size: '100' })
-        );
-        /* jshint ignore:end */
-      } else {
-          /* jshint ignore:start */
-          return _react2.default.createElement(
-            'span',
-            { className: 'user-avatar' },
-            _react2.default.createElement(_avatar2.default, { size: '100' })
-          );
-          /* jshint ignore:end */
-        }
-    }
-  }, {
-    key: 'renderUsername',
-    value: function renderUsername(item) {
-      if (item.changed_by) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'a',
-          { href: item.changed_by.absolute_url, className: 'item-title' },
-          item.changed_by.username
-        );
-        /* jshint ignore:end */
-      } else {
-          /* jshint ignore:start */
-          return _react2.default.createElement(
-            'span',
-            { className: 'item-title' },
-            item.changed_by_username
-          );
-          /* jshint ignore:end */
-        }
-    }
-  }, {
-    key: 'renderHistory',
-    value: function renderHistory() {
-      var _this5 = this;
-
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'username-history ui-ready' },
-        _react2.default.createElement(
-          'ul',
-          { className: 'list-group' },
-          this.props.changes.map(function (item) {
-            return _react2.default.createElement(
-              'li',
-              { className: 'list-group-item', key: item.id },
-              _react2.default.createElement(
-                'div',
-                { className: 'username-change-avatar' },
-                _this5.renderUserAvatar(item)
-              ),
-              _react2.default.createElement(
-                'div',
-                { className: 'username-change-author' },
-                _this5.renderUsername(item)
-              ),
-              _react2.default.createElement(
-                'div',
-                { className: 'username-change' },
-                item.old_username,
-                _react2.default.createElement(
-                  'span',
-                  { className: 'material-icon' },
-                  'arrow_forward'
-                ),
-                item.new_username
-              ),
-              _react2.default.createElement(
-                'div',
-                { className: 'username-change-date' },
-                _react2.default.createElement(
-                  'abbr',
-                  { title: item.changed_on.format('LLL') },
-                  item.changed_on.fromNow()
-                )
-              )
-            );
-          })
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }, {
-    key: 'renderEmptyHistory',
-    value: function renderEmptyHistory() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'username-history ui-ready' },
-        _react2.default.createElement(
-          'ul',
-          { className: 'list-group' },
-          _react2.default.createElement(
-            'li',
-            { className: 'list-group-item empty-message' },
-            gettext("No name changes have been recorded for your account.")
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }, {
-    key: 'renderHistoryPreview',
-    value: function renderHistoryPreview() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'username-history ui-preview' },
-        _react2.default.createElement(
-          'ul',
-          { className: 'list-group' },
-          random.range(3, 5).map(function (i) {
-            return _react2.default.createElement(
-              'li',
-              { className: 'list-group-item', key: i },
-              _react2.default.createElement(
-                'div',
-                { className: 'username-change-avatar' },
-                _react2.default.createElement(
-                  'span',
-                  { className: 'user-avatar' },
-                  _react2.default.createElement(_avatar2.default, { size: '100' })
-                )
-              ),
-              _react2.default.createElement(
-                'div',
-                { className: 'username-change-author' },
-                _react2.default.createElement(
-                  'span',
-                  { className: 'ui-preview-text', style: { width: random.int(30, 100) + "px" } },
-                  ' '
-                )
-              ),
-              _react2.default.createElement(
-                'div',
-                { className: 'username-change' },
-                _react2.default.createElement(
-                  'span',
-                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
-                  ' '
-                ),
-                _react2.default.createElement(
-                  'span',
-                  { className: 'material-icon' },
-                  'arrow_forward'
-                ),
-                _react2.default.createElement(
-                  'span',
-                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
-                  ' '
-                )
-              ),
-              _react2.default.createElement(
-                'div',
-                { className: 'username-change-date' },
-                _react2.default.createElement(
-                  'span',
-                  { className: 'ui-preview-text', style: { width: random.int(50, 100) + "px" } },
-                  ' '
-                )
-              )
-            );
-          })
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      if (this.props.isLoaded) {
-        if (this.props.changes.length) {
-          return this.renderHistory();
-        } else {
-          return this.renderEmptyHistory();
-        }
-      } else {
-        return this.renderHistoryPreview();
-      }
-    }
-  }]);
-
-  return UsernameHistory;
-}(_react2.default.Component);
-
-var _class = function (_React$Component4) {
-  _inherits(_class, _React$Component4);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this6 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this6.onComplete = function (username, slug, options) {
-      _this6.setState({
-        options: options
-      });
-
-      _store2.default.dispatch((0, _usernameHistory.addNameChange)({ username: username, slug: slug }, _this6.props.user, _this6.props.user));
-      _store2.default.dispatch((0, _users.updateUsername)(_this6.props.user, username, slug));
-
-      _snackbar2.default.success(gettext("Your username has been changed successfully."));
-    };
-
-    _this6.state = {
-      isLoaded: false,
-      options: null
-    };
-    return _this6;
-  }
-
-  _createClass(_class, [{
-    key: 'componentDidMount',
-    value: function componentDidMount() {
-      var _this7 = this;
-
-      _pageTitle2.default.set({
-        title: gettext("Change username"),
-        parent: gettext("Change your options")
-      });
-
-      Promise.all([_ajax2.default.get(this.props.user.api_url.username), _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), { user: this.props.user.id })]).then(function (data) {
-        _this7.setState({
-          isLoaded: true,
-          options: {
-            changes_left: data[0].changes_left,
-            length_min: data[0].length_min,
-            length_max: data[0].length_max,
-            next_on: data[0].next_on ? (0, _moment2.default)(data[0].next_on) : null
-          }
-        });
-
-        _store2.default.dispatch((0, _usernameHistory.dehydrate)(data[1].results));
-      });
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: 'getChangeForm',
-
-    /* jshint ignore:end */
-
-    value: function getChangeForm() {
-      if (this.state.isLoaded) {
-        if (this.state.options.changes_left > 0) {
-          /* jshint ignore:start */
-          return _react2.default.createElement(ChangeUsername, { user: this.props.user,
-            options: this.state.options,
-            complete: this.onComplete });
-          /* jshint ignore:end */
-        } else {
-            /* jshint ignore:start */
-            return _react2.default.createElement(NoChangesLeft, { options: this.state.options });
-            /* jshint ignore:end */
-          }
-      } else {
-          /* jshint ignore:start */
-          return _react2.default.createElement(ChangeUsernameLoading, null);
-          /* jshint ignore:end */
-        }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        null,
-        this.getChangeForm(),
-        _react2.default.createElement(UsernameHistory, { isLoaded: this.state.isLoaded,
-          changes: this.props['username-history'] })
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../../index":85,"../../reducers/username-history":89,"../../reducers/users":90,"../../services/ajax":91,"../../services/page-title":98,"../../services/snackbar":99,"../../services/store":100,"../../utils/random":107,"../../utils/validators":109,"../avatar":49,"../button":51,"../form":58,"../form-group":57,"../loader":60,"moment":"moment","react":"react"}],63:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _button = require('../button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _form = require('../form');
-
-var _form2 = _interopRequireDefault(_form);
-
-var _formGroup = require('../form-group');
-
-var _formGroup2 = _interopRequireDefault(_formGroup);
-
-var _select = require('../select');
-
-var _select2 = _interopRequireDefault(_select);
-
-var _yesNoSwitch = require('../yes-no-switch');
-
-var _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);
-
-var _auth = require('../../reducers/auth');
-
-var _ajax = require('../../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _pageTitle = require('../../services/page-title');
-
-var _pageTitle2 = _interopRequireDefault(_pageTitle);
-
-var _snackbar = require('../../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _store = require('../../services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-var _class = function (_Form) {
-  _inherits(_class, _Form);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this.state = {
-      'isLoading': false,
-
-      'is_hiding_presence': props.user.is_hiding_presence,
-      'limits_private_thread_invites_to': props.user.limits_private_thread_invites_to,
-      'subscribe_to_started_threads': props.user.subscribe_to_started_threads,
-      'subscribe_to_replied_threads': props.user.subscribe_to_replied_threads,
-
-      'errors': {}
-    };
-
-    _this.privateThreadInvitesChoices = [{
-      'value': 0,
-      'icon': 'help_outline',
-      'label': gettext('Everybody')
-    }, {
-      'value': 1,
-      'icon': 'done_all',
-      'label': gettext('Users I follow')
-    }, {
-      'value': 2,
-      'icon': 'highlight_off',
-      'label': gettext('Nobody')
-    }];
-
-    _this.subscribeToChoices = [{
-      'value': 0,
-      'icon': 'bookmark_border',
-      'label': gettext('No')
-    }, {
-      'value': 1,
-      'icon': 'bookmark',
-      'label': gettext('Bookmark')
-    }, {
-      'value': 2,
-      'icon': 'mail',
-      'label': gettext('Bookmark with e-mail notification')
-    }];
-    return _this;
-  }
-
-  _createClass(_class, [{
-    key: 'send',
-    value: function send() {
-      return _ajax2.default.post(this.props.user.api_url.options, {
-        'is_hiding_presence': this.state.is_hiding_presence,
-        'limits_private_thread_invites_to': this.state.limits_private_thread_invites_to,
-        'subscribe_to_started_threads': this.state.subscribe_to_started_threads,
-        'subscribe_to_replied_threads': this.state.subscribe_to_replied_threads
-      });
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess() {
-      _store2.default.dispatch((0, _auth.patchUser)({
-        'is_hiding_presence': this.state.is_hiding_presence,
-        'limits_private_thread_invites_to': this.state.limits_private_thread_invites_to,
-        'subscribe_to_started_threads': this.state.subscribe_to_started_threads,
-        'subscribe_to_replied_threads': this.state.subscribe_to_replied_threads
-      }));
-      _snackbar2.default.success(gettext("Your forum options have been changed."));
-    }
-  }, {
-    key: 'handleError',
-    value: function handleError(rejection) {
-      if (rejection.status === 400) {
-        _snackbar2.default.error(gettext("Please reload page and try again."));
-      } else {
-        _snackbar2.default.apiError(rejection);
-      }
-    }
-  }, {
-    key: 'componentDidMount',
-    value: function componentDidMount() {
-      _pageTitle2.default.set({
-        title: gettext("Forum options"),
-        parent: gettext("Change your options")
-      });
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'form',
-        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
-        _react2.default.createElement(
-          'div',
-          { className: 'panel panel-default panel-form' },
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-heading' },
-            _react2.default.createElement(
-              'h3',
-              { className: 'panel-title' },
-              gettext("Change forum options")
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-body' },
-            _react2.default.createElement(
-              'fieldset',
-              null,
-              _react2.default.createElement(
-                'legend',
-                null,
-                gettext("Privacy settings")
-              ),
-              _react2.default.createElement(
-                _formGroup2.default,
-                { label: gettext("Hide my presence"),
-                  helpText: gettext("If you hide your presence, only members with permission to see hidden users will see when you are online."),
-                  'for': 'id_is_hiding_presence',
-                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
-                _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_hiding_presence',
-                  disabled: this.state.isLoading,
-                  iconOn: 'visibility',
-                  iconOff: 'visibility_off',
-                  labelOn: gettext("Show my presence to other users"),
-                  labelOff: gettext("Hide my presence from other users"),
-                  onChange: this.bindInput('is_hiding_presence'),
-                  value: this.state.is_hiding_presence })
-              ),
-              _react2.default.createElement(
-                _formGroup2.default,
-                { label: gettext("Private thread invitations"),
-                  'for': 'id_limits_private_thread_invites_to',
-                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
-                _react2.default.createElement(_select2.default, { id: 'id_limits_private_thread_invites_to',
-                  disabled: this.state.isLoading,
-                  onChange: this.bindInput('limits_private_thread_invites_to'),
-                  value: this.state.limits_private_thread_invites_to,
-                  choices: this.privateThreadInvitesChoices })
-              )
-            ),
-            _react2.default.createElement(
-              'fieldset',
-              null,
-              _react2.default.createElement(
-                'legend',
-                null,
-                gettext("Automatic subscriptions")
-              ),
-              _react2.default.createElement(
-                _formGroup2.default,
-                { label: gettext("Threads I start"),
-                  'for': 'id_subscribe_to_started_threads',
-                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
-                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_started_threads',
-                  disabled: this.state.isLoading,
-                  onChange: this.bindInput('subscribe_to_started_threads'),
-                  value: this.state.subscribe_to_started_threads,
-                  choices: this.subscribeToChoices })
-              ),
-              _react2.default.createElement(
-                _formGroup2.default,
-                { label: gettext("Threads I reply to"),
-                  'for': 'id_subscribe_to_replied_threads',
-                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
-                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_replied_threads',
-                  disabled: this.state.isLoading,
-                  onChange: this.bindInput('subscribe_to_replied_threads'),
-                  value: this.state.subscribe_to_replied_threads,
-                  choices: this.subscribeToChoices })
-              )
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-footer' },
-            _react2.default.createElement(
-              'div',
-              { className: 'row' },
-              _react2.default.createElement(
-                'div',
-                { className: 'col-sm-8 col-sm-offset-4' },
-                _react2.default.createElement(
-                  _button2.default,
-                  { className: 'btn-primary', loading: this.state.isLoading },
-                  gettext("Save changes")
-                )
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_form2.default);
-
-exports.default = _class;
-
-},{"../../reducers/auth":86,"../../services/ajax":91,"../../services/page-title":98,"../../services/snackbar":99,"../../services/store":100,"../button":51,"../form":58,"../form-group":57,"../select":73,"../yes-no-switch":84,"react":"react"}],64:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.CompactNav = exports.SideNav = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactRouter = require('react-router');
-
-var _li = require('../li');
-
-var _li2 = _interopRequireDefault(_li);
-
-var _index = require('../../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-//jshint ignore:line
-
-//jshint ignore:line
-
-var SideNav = exports.SideNav = function (_React$Component) {
-  _inherits(SideNav, _React$Component);
-
-  function SideNav() {
-    _classCallCheck(this, SideNav);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));
-  }
-
-  _createClass(SideNav, [{
-    key: 'render',
-    value: function render() {
-      var _this2 = this;
-
-      // jshint ignore:start
-      return _react2.default.createElement(
-        'div',
-        { className: 'list-group nav-side' },
-        this.props.options.map(function (option) {
-          return _react2.default.createElement(
-            _reactRouter.Link,
-            { to: _this2.props.baseUrl + option.component + '/',
-              className: 'list-group-item',
-              activeClassName: 'active',
-              key: option.component },
-            _react2.default.createElement(
-              'span',
-              { className: 'material-icon' },
-              option.icon
-            ),
-            option.name
-          );
-        })
-      );
-      // jshint ignore:end
-    }
-  }]);
-
-  return SideNav;
-}(_react2.default.Component);
-
-var CompactNav = exports.CompactNav = function (_React$Component2) {
-  _inherits(CompactNav, _React$Component2);
-
-  function CompactNav() {
-    _classCallCheck(this, CompactNav);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));
-  }
-
-  _createClass(CompactNav, [{
-    key: 'render',
-    value: function render() {
-      var _this4 = this;
-
-      // jshint ignore:start
-      return _react2.default.createElement(
-        'ul',
-        { className: 'dropdown-menu', role: 'menu' },
-        this.props.options.map(function (option) {
-          return _react2.default.createElement(
-            _li2.default,
-            { path: _this4.props.baseUrl + option.component + '/',
-              key: option.component },
-            _react2.default.createElement(
-              _reactRouter.Link,
-              { to: _this4.props.baseUrl + option.component + '/' },
-              _react2.default.createElement(
-                'span',
-                { className: 'material-icon' },
-                option.icon
-              ),
-              option.name
-            )
-          );
-        })
-      );
-      // jshint ignore:end
-    }
-  }]);
-
-  return CompactNav;
-}(_react2.default.Component);
-
-},{"../../index":85,"../li":59,"react":"react","react-router":"react-router"}],65:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.select = select;
-exports.paths = paths;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactRedux = require('react-redux');
-
-var _navs = require('./navs');
-
-var _forumOptions = require('./forum-options');
-
-var _forumOptions2 = _interopRequireDefault(_forumOptions);
-
-var _changeUsername = require('./change-username');
-
-var _changeUsername2 = _interopRequireDefault(_changeUsername);
-
-var _signInCredentials = require('./sign-in-credentials');
-
-var _signInCredentials2 = _interopRequireDefault(_signInCredentials);
-
-var _index = require('../../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this.toggleNav = function () {
-      if (_this.state.dropdown) {
-        _this.setState({
-          dropdown: false
-        });
-      } else {
-        _this.setState({
-          dropdown: true
-        });
-      }
-    };
-
-    _this.state = {
-      dropdown: false
-    };
-    return _this;
-  }
-
-  /* jshint ignore:start */
-
-  _createClass(_class, [{
-    key: 'getToggleNavClassName',
-
-    /* jshint ignore:end */
-
-    value: function getToggleNavClassName() {
-      if (this.state.dropdown) {
-        return 'btn btn-default btn-icon open';
-      } else {
-        return 'btn btn-default btn-icon';
-      }
-    }
-  }, {
-    key: 'getCompactNavClassName',
-    value: function getCompactNavClassName() {
-      if (this.state.dropdown) {
-        return 'compact-nav open';
-      } else {
-        return 'compact-nav';
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'page page-options' },
-        _react2.default.createElement(
-          'div',
-          { className: 'page-header' },
-          _react2.default.createElement(
-            'div',
-            { className: 'container' },
-            _react2.default.createElement(
-              'h1',
-              { className: 'pull-left' },
-              gettext("Change your options")
-            ),
-            _react2.default.createElement(
-              'button',
-              { className: 'btn btn-default btn-icon btn-dropdown-toggle hidden-md hidden-lg',
-                type: 'button',
-                onClick: this.toggleNav,
-                'aria-haspopup': 'true',
-                'aria-expanded': this.state.dropdown ? 'true' : 'false' },
-              _react2.default.createElement(
-                'i',
-                { className: 'material-icon' },
-                'menu'
-              )
-            )
-          )
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: this.getCompactNavClassName() },
-          _react2.default.createElement(_navs.CompactNav, { options: _index2.default.get('USER_OPTIONS'),
-            baseUrl: _index2.default.get('USERCP_URL') })
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'container' },
-          _react2.default.createElement(
-            'div',
-            { className: 'row' },
-            _react2.default.createElement(
-              'div',
-              { className: 'col-md-3 hidden-xs hidden-sm' },
-              _react2.default.createElement(_navs.SideNav, { options: _index2.default.get('USER_OPTIONS'),
-                baseUrl: _index2.default.get('USERCP_URL') })
-            ),
-            _react2.default.createElement(
-              'div',
-              { className: 'col-md-9' },
-              this.props.children
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-function select(store) {
-  return {
-    'tick': store.tick.tick,
-    'user': store.auth.user,
-    'username-history': store['username-history']
-  };
-}
-
-function paths() {
-  return [{
-    path: _index2.default.get('USERCP_URL') + 'forum-options/',
-    component: (0, _reactRedux.connect)(select)(_forumOptions2.default)
-  }, {
-    path: _index2.default.get('USERCP_URL') + 'change-username/',
-    component: (0, _reactRedux.connect)(select)(_changeUsername2.default)
-  }, {
-    path: _index2.default.get('USERCP_URL') + 'sign-in-credentials/',
-    component: (0, _reactRedux.connect)(select)(_signInCredentials2.default)
-  }];
-}
-
-},{"../../index":85,"./change-username":62,"./forum-options":63,"./navs":64,"./sign-in-credentials":66,"react":"react","react-redux":"react-redux"}],66:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.ChangePassword = exports.ChangeEmail = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _button = require('../button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _form = require('../form');
-
-var _form2 = _interopRequireDefault(_form);
-
-var _formGroup = require('../form-group');
-
-var _formGroup2 = _interopRequireDefault(_formGroup);
-
-var _index = require('../../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _ajax = require('../../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _pageTitle = require('../../services/page-title');
-
-var _pageTitle2 = _interopRequireDefault(_pageTitle);
-
-var _snackbar = require('../../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _validators = require('../../utils/validators');
-
-var validators = _interopRequireWildcard(_validators);
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-
-var ChangeEmail = exports.ChangeEmail = function (_Form) {
-  _inherits(ChangeEmail, _Form);
-
-  function ChangeEmail(props) {
-    _classCallCheck(this, ChangeEmail);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeEmail).call(this, props));
-
-    _this.state = {
-      new_email: '',
-      password: '',
-
-      validators: {
-        new_email: [validators.email()],
-        password: []
-      },
-
-      isLoading: false
-    };
-    return _this;
-  }
-
-  _createClass(ChangeEmail, [{
-    key: 'clean',
-    value: function clean() {
-      var errors = this.validate();
-      var lengths = [this.state.new_email.trim().length, this.state.password.trim().length];
-
-      if (lengths.indexOf(0) !== -1) {
-        _snackbar2.default.error(gettext("Fill out all fields."));
-        return false;
-      }
-
-      if (errors.new_email) {
-        _snackbar2.default.error(errors.new_email[0]);
-        return false;
-      }
-
-      return true;
-    }
-  }, {
-    key: 'send',
-    value: function send() {
-      return _ajax2.default.post(this.props.user.api_url.change_email, {
-        new_email: this.state.new_email,
-        password: this.state.password
-      });
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess(response) {
-      this.setState({
-        new_email: '',
-        password: ''
-      });
-
-      _snackbar2.default.success(response.detail);
-    }
-  }, {
-    key: 'handleError',
-    value: function handleError(rejection) {
-      if (rejection.status === 400) {
-        if (rejection.new_email) {
-          _snackbar2.default.error(rejection.new_email);
-        } else {
-          _snackbar2.default.error(rejection.password);
-        }
-      } else {
-        _snackbar2.default.apiError(rejection);
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'form',
-        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
-        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),
-        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),
-        _react2.default.createElement(
-          'div',
-          { className: 'panel panel-default panel-form' },
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-heading' },
-            _react2.default.createElement(
-              'h3',
-              { className: 'panel-title' },
-              gettext("Change e-mail address")
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-body' },
-            _react2.default.createElement(
-              _formGroup2.default,
-              { label: gettext("New e-mail"), 'for': 'id_new_email',
-                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
-              _react2.default.createElement('input', { type: 'text', id: 'id_new_email', className: 'form-control',
-                disabled: this.state.isLoading,
-                onChange: this.bindInput('new_email'),
-                value: this.state.new_email })
-            ),
-            _react2.default.createElement('hr', null),
-            _react2.default.createElement(
-              _formGroup2.default,
-              { label: gettext("Your current password"), 'for': 'id_password',
-                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
-              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',
-                disabled: this.state.isLoading,
-                onChange: this.bindInput('password'),
-                value: this.state.password })
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-footer' },
-            _react2.default.createElement(
-              'div',
-              { className: 'row' },
-              _react2.default.createElement(
-                'div',
-                { className: 'col-sm-8 col-sm-offset-4' },
-                _react2.default.createElement(
-                  _button2.default,
-                  { className: 'btn-primary', loading: this.state.isLoading },
-                  gettext("Change e-mail")
-                )
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ChangeEmail;
-}(_form2.default);
-
-var ChangePassword = exports.ChangePassword = function (_Form2) {
-  _inherits(ChangePassword, _Form2);
-
-  function ChangePassword(props) {
-    _classCallCheck(this, ChangePassword);
-
-    var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(ChangePassword).call(this, props));
-
-    _this2.state = {
-      new_password: '',
-      repeat_password: '',
-      password: '',
-
-      validators: {
-        new_password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],
-        repeat_password: [],
-        password: []
-      },
-
-      isLoading: false
-    };
-    return _this2;
-  }
-
-  _createClass(ChangePassword, [{
-    key: 'clean',
-    value: function clean() {
-      var errors = this.validate();
-      var lengths = [this.state.new_password.trim().length, this.state.repeat_password.trim().length, this.state.password.trim().length];
-
-      if (lengths.indexOf(0) !== -1) {
-        _snackbar2.default.error(gettext("Fill out all fields."));
-        return false;
-      }
-
-      if (errors.new_password) {
-        _snackbar2.default.error(errors.new_password[0]);
-        return false;
-      }
-
-      if (this.state.new_password.trim() !== this.state.repeat_password.trim()) {
-        _snackbar2.default.error(gettext("New passwords are different."));
-        return false;
-      }
-
-      return true;
-    }
-  }, {
-    key: 'send',
-    value: function send() {
-      return _ajax2.default.post(this.props.user.api_url.change_password, {
-        new_password: this.state.new_password,
-        password: this.state.password
-      });
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess(response) {
-      this.setState({
-        new_password: '',
-        repeat_password: '',
-        password: ''
-      });
-
-      _snackbar2.default.success(response.detail);
-    }
-  }, {
-    key: 'handleError',
-    value: function handleError(rejection) {
-      if (rejection.status === 400) {
-        if (rejection.new_password) {
-          _snackbar2.default.error(rejection.new_password);
-        } else {
-          _snackbar2.default.error(rejection.password);
-        }
-      } else {
-        _snackbar2.default.apiError(rejection);
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'form',
-        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
-        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),
-        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),
-        _react2.default.createElement(
-          'div',
-          { className: 'panel panel-default panel-form' },
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-heading' },
-            _react2.default.createElement(
-              'h3',
-              { className: 'panel-title' },
-              gettext("Change password")
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-body' },
-            _react2.default.createElement(
-              _formGroup2.default,
-              { label: gettext("New password"), 'for': 'id_new_password',
-                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
-              _react2.default.createElement('input', { type: 'password', id: 'id_new_password', className: 'form-control',
-                disabled: this.state.isLoading,
-                onChange: this.bindInput('new_password'),
-                value: this.state.new_password })
-            ),
-            _react2.default.createElement(
-              _formGroup2.default,
-              { label: gettext("Repeat password"), 'for': 'id_repeat_password',
-                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
-              _react2.default.createElement('input', { type: 'password', id: 'id_repeat_password', className: 'form-control',
-                disabled: this.state.isLoading,
-                onChange: this.bindInput('repeat_password'),
-                value: this.state.repeat_password })
-            ),
-            _react2.default.createElement('hr', null),
-            _react2.default.createElement(
-              _formGroup2.default,
-              { label: gettext("Your current password"), 'for': 'id_password',
-                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
-              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',
-                disabled: this.state.isLoading,
-                onChange: this.bindInput('password'),
-                value: this.state.password })
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'panel-footer' },
-            _react2.default.createElement(
-              'div',
-              { className: 'row' },
-              _react2.default.createElement(
-                'div',
-                { className: 'col-sm-8 col-sm-offset-4' },
-                _react2.default.createElement(
-                  _button2.default,
-                  { className: 'btn-primary', loading: this.state.isLoading },
-                  gettext("Change password")
-                )
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ChangePassword;
-}(_form2.default);
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: 'componentDidMount',
-    value: function componentDidMount() {
-      _pageTitle2.default.set({
-        title: gettext("Change email or password"),
-        parent: gettext("Change your options")
-      });
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        null,
-        _react2.default.createElement(ChangeEmail, { user: this.props.user }),
-        _react2.default.createElement(ChangePassword, { user: this.props.user }),
-        _react2.default.createElement(
-          'p',
-          { className: 'message-line' },
-          _react2.default.createElement(
-            'span',
-            { className: 'material-icon' },
-            'warning'
-          ),
-          _react2.default.createElement(
-            'a',
-            { href: _index2.default.get('FORGOTTEN_PASSWORD_URL') },
-            gettext("Change forgotten password")
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../../index":85,"../../services/ajax":91,"../../services/page-title":98,"../../services/snackbar":99,"../../utils/validators":109,"../button":51,"../form":58,"../form-group":57,"react":"react"}],67:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.LABELS = exports.STYLES = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _zxcvbn = require('../services/zxcvbn');
-
-var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var STYLES = exports.STYLES = ['progress-bar-danger', 'progress-bar-warning', 'progress-bar-warning', 'progress-bar-primary', 'progress-bar-success'];
-
-var LABELS = exports.LABELS = [gettext("Entered password is very weak."), gettext("Entered password is weak."), gettext("Entered password is average."), gettext("Entered password is strong."), gettext("Entered password is very strong.")];
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this._score = 0;
-    _this._password = null;
-    _this._inputs = [];
-    return _this;
-  }
-
-  _createClass(_class, [{
-    key: 'getScore',
-    value: function getScore(password, inputs) {
-      var _this2 = this;
-
-      var cacheStale = false;
-
-      if (password.trim() !== this._password) {
-        cacheStale = true;
-      }
-
-      if (inputs.length !== this._inputs.length) {
-        cacheStale = true;
-      } else {
-        inputs.map(function (value, i) {
-          if (value.trim() !== _this2._inputs[i]) {
-            cacheStale = true;
-          }
-        });
-      }
-
-      if (cacheStale) {
-        this._score = _zxcvbn2.default.scorePassword(password, inputs);
-        this._password = password.trim();
-        this._inputs = inputs.map(function (value) {
-          return value.trim();
-        });
-      }
-
-      return this._score;
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      var score = this.getScore(this.props.password, this.props.inputs);
-
-      return _react2.default.createElement(
-        'div',
-        { className: 'help-block password-strength' },
-        _react2.default.createElement(
-          'div',
-          { className: 'progress' },
-          _react2.default.createElement(
-            'div',
-            { className: "progress-bar " + STYLES[score],
-              style: { width: 20 + 20 * score + '%' },
-              role: 'progress-bar',
-              'aria-valuenow': score,
-              'aria-valuemin': '0',
-              'aria-valuemax': '4' },
-            _react2.default.createElement(
-              'span',
-              { className: 'sr-only' },
-              LABELS[score]
-            )
-          )
-        ),
-        _react2.default.createElement(
-          'p',
-          { className: 'text-small' },
-          LABELS[score]
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../services/zxcvbn":101,"react":"react"}],68:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _loader = require('./loader');
-
-var _loader2 = _interopRequireDefault(_loader);
-
-var _register = require('./register.js');
-
-var _register2 = _interopRequireDefault(_register);
-
-var _captcha = require('../services/captcha');
-
-var _captcha2 = _interopRequireDefault(_captcha);
-
-var _modal = require('../services/modal');
-
-var _modal2 = _interopRequireDefault(_modal);
-
-var _snackbar = require('../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _zxcvbn = require('../services/zxcvbn');
-
-var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-// jshint ignore:line
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this.showRegisterModal = function () {
-      if (misago.get('SETTINGS').account_activation === 'closed') {
-        _snackbar2.default.info(gettext("New registrations are currently disabled."));
-      } else if (_this.state.isLoaded) {
-        _modal2.default.show(_register2.default);
-      } else {
-        _this.setState({
-          'isLoading': true
-        });
-
-        Promise.all([_captcha2.default.load(), _zxcvbn2.default.load()]).then(function () {
-          if (!_this.state.isLoaded) {
-            _this.setState({
-              'isLoading': false,
-              'isLoaded': false
-            });
-          }
-
-          _modal2.default.show(_register2.default);
-        });
-      }
-    };
-
-    _this.state = {
-      'isLoading': false,
-      'isLoaded': false
-    };
-    return _this;
-  }
-
-  /* jshint ignore:start */
-
-  _createClass(_class, [{
-    key: 'getClassName',
-
-    /* jshint ignore:end */
-
-    value: function getClassName() {
-      return this.props.className + (this.state.isLoading ? ' btn-loading' : '');
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'button',
-        { type: 'button', onClick: this.showRegisterModal,
-          className: 'btn ' + this.getClassName(),
-          disabled: this.state.isLoaded },
-        gettext("Register"),
-        this.state.isLoading ? _react2.default.createElement(_loader2.default, null) : null
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../services/captcha":93,"../services/modal":97,"../services/snackbar":99,"../services/zxcvbn":101,"./loader":60,"./register.js":69,"react":"react"}],69:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.RegisterComplete = exports.RegisterForm = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _button = require('./button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _form = require('./form');
-
-var _form2 = _interopRequireDefault(_form);
-
-var _formGroup = require('./form-group');
-
-var _formGroup2 = _interopRequireDefault(_formGroup);
-
-var _passwordStrength = require('./password-strength');
-
-var _passwordStrength2 = _interopRequireDefault(_passwordStrength);
-
-var _index = require('../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _ajax = require('../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _auth = require('../services/auth');
-
-var _auth2 = _interopRequireDefault(_auth);
-
-var _captcha = require('../services/captcha');
-
-var _captcha2 = _interopRequireDefault(_captcha);
-
-var _modal = require('../services/modal');
-
-var _modal2 = _interopRequireDefault(_modal);
-
-var _snackbar = require('../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _bannedPage = require('../utils/banned-page');
-
-var _bannedPage2 = _interopRequireDefault(_bannedPage);
-
-var _validators = require('../utils/validators');
-
-var validators = _interopRequireWildcard(_validators);
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-var RegisterForm = exports.RegisterForm = function (_Form) {
-  _inherits(RegisterForm, _Form);
-
-  function RegisterForm(props) {
-    _classCallCheck(this, RegisterForm);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterForm).call(this, props));
-
-    _this.state = {
-      'isLoading': false,
-
-      'username': '',
-      'email': '',
-      'password': '',
-      'captcha': '',
-
-      'validators': {
-        'username': [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))],
-        'email': [validators.email()],
-        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))],
-        'captcha': _captcha2.default.validator()
-      },
-
-      'errors': {}
-    };
-    return _this;
-  }
-
-  _createClass(RegisterForm, [{
-    key: 'clean',
-    value: function clean() {
-      if (this.isValid()) {
-        return true;
-      } else {
-        _snackbar2.default.error(gettext("Form contains errors."));
-        this.setState({
-          'errors': this.validate()
-        });
-        return false;
-      }
-    }
-  }, {
-    key: 'send',
-    value: function send() {
-      return _ajax2.default.post(_index2.default.get('USERS_API'), {
-        'username': this.state.username,
-        'email': this.state.email,
-        'password': this.state.password,
-        'captcha': this.state.captcha
-      });
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess(apiResponse) {
-      this.props.callback(apiResponse);
-    }
-  }, {
-    key: 'handleError',
-    value: function handleError(rejection) {
-      if (rejection.status === 400) {
-        this.setState({
-          'errors': Object.assign({}, this.state.errors, rejection)
-        });
-        _snackbar2.default.error(gettext("Form contains errors."));
-      } else if (rejection.status === 403 && rejection.ban) {
-        (0, _bannedPage2.default)(rejection.ban);
-        _modal2.default.hide();
-      } else {
-        _snackbar2.default.apiError(rejection);
-      }
-    }
-  }, {
-    key: 'getLegalFootNote',
-    value: function getLegalFootNote() {
-      if (_index2.default.get('TERMS_OF_SERVICE_URL')) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'a',
-          { href: _index2.default.get('TERMS_OF_SERVICE_URL'),
-            target: '_blank' },
-          gettext("By registering you agree to site's terms and conditions.")
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'modal-dialog modal-register', role: 'document' },
-        _react2.default.createElement(
-          'div',
-          { className: 'modal-content' },
-          _react2.default.createElement(
-            'div',
-            { className: 'modal-header' },
-            _react2.default.createElement(
-              'button',
-              { type: 'button', className: 'close', 'data-dismiss': 'modal',
-                'aria-label': gettext("Close") },
-              _react2.default.createElement(
-                'span',
-                { 'aria-hidden': 'true' },
-                '×'
-              )
-            ),
-            _react2.default.createElement(
-              'h4',
-              { className: 'modal-title' },
-              gettext("Register")
-            )
-          ),
-          _react2.default.createElement(
-            'form',
-            { onSubmit: this.handleSubmit, className: 'form-horizontal' },
-            _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),
-            _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),
-            _react2.default.createElement(
-              'div',
-              { className: 'modal-body' },
-              _react2.default.createElement(
-                _formGroup2.default,
-                { label: gettext("Username"), 'for': 'id_username',
-                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',
-                  validation: this.state.errors.username },
-                _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',
-                  'aria-describedby': 'id_username_status',
-                  disabled: this.state.isLoading,
-                  onChange: this.bindInput('username'),
-                  value: this.state.username })
-              ),
-              _react2.default.createElement(
-                _formGroup2.default,
-                { label: gettext("E-mail"), 'for': 'id_email',
-                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',
-                  validation: this.state.errors.email },
-                _react2.default.createElement('input', { type: 'text', id: 'id_email', className: 'form-control',
-                  'aria-describedby': 'id_email_status',
-                  disabled: this.state.isLoading,
-                  onChange: this.bindInput('email'),
-                  value: this.state.email })
-              ),
-              _react2.default.createElement(
-                _formGroup2.default,
-                { label: gettext("Password"), 'for': 'id_password',
-                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',
-                  validation: this.state.errors.password,
-                  extra: _react2.default.createElement(_passwordStrength2.default, { password: this.state.password,
-                    inputs: [this.state.username, this.state.email] }) },
-                _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',
-                  'aria-describedby': 'id_password_status',
-                  disabled: this.state.isLoading,
-                  onChange: this.bindInput('password'),
-                  value: this.state.password })
-              ),
-              _captcha2.default.component({
-                form: this,
-                labelClass: "col-sm-4",
-                controlClass: "col-sm-8"
-              })
-            ),
-            _react2.default.createElement(
-              'div',
-              { className: 'modal-footer' },
-              this.getLegalFootNote(),
-              _react2.default.createElement(
-                _button2.default,
-                { className: 'btn-primary', loading: this.state.isLoading },
-                gettext("Register account")
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return RegisterForm;
-}(_form2.default);
-
-var RegisterComplete = exports.RegisterComplete = function (_React$Component) {
-  _inherits(RegisterComplete, _React$Component);
-
-  function RegisterComplete() {
-    _classCallCheck(this, RegisterComplete);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterComplete).apply(this, arguments));
-  }
-
-  _createClass(RegisterComplete, [{
-    key: 'getLead',
-    value: function getLead() {
-      if (this.props.activation === 'user') {
-        return gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in.");
-      } else if (this.props.activation === 'admin') {
-        return gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.");
-      }
-    }
-  }, {
-    key: 'getSubscript',
-    value: function getSubscript() {
-      if (this.props.activation === 'user') {
-        return gettext("We have sent an e-mail to %(email)s with link that you have to click to activate your account.");
-      } else if (this.props.activation === 'admin') {
-        return gettext("We will send an e-mail to %(email)s when this takes place.");
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'modal-dialog modal-message modal-register',
-          role: 'document' },
-        _react2.default.createElement(
-          'div',
-          { className: 'modal-content' },
-          _react2.default.createElement(
-            'div',
-            { className: 'modal-header' },
-            _react2.default.createElement(
-              'button',
-              { type: 'button', className: 'close', 'data-dismiss': 'modal',
-                'aria-label': gettext("Close") },
-              _react2.default.createElement(
-                'span',
-                { 'aria-hidden': 'true' },
-                '×'
-              )
-            ),
-            _react2.default.createElement(
-              'h4',
-              { className: 'modal-title' },
-              gettext("Registration complete")
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'modal-body' },
-            _react2.default.createElement(
-              'div',
-              { className: 'message-icon' },
-              _react2.default.createElement(
-                'span',
-                { className: 'material-icon' },
-                'info_outline'
-              )
-            ),
-            _react2.default.createElement(
-              'div',
-              { className: 'message-body' },
-              _react2.default.createElement(
-                'p',
-                { className: 'lead' },
-                interpolate(this.getLead(), { 'username': this.props.username }, true)
-              ),
-              _react2.default.createElement(
-                'p',
-                null,
-                interpolate(this.getSubscript(), { 'email': this.props.email }, true)
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return RegisterComplete;
-}(_react2.default.Component);
-
-var _class = function (_React$Component2) {
-  _inherits(_class, _React$Component2);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this3.completeRegistration = function (apiResponse) {
-      if (apiResponse.activation === 'active') {
-        _modal2.default.hide();
-        _auth2.default.signIn(apiResponse);
-      } else {
-        _this3.setState({
-          'complete': apiResponse
-        });
-      }
-    };
-
-    _this3.state = {
-      'complete': false
-    };
-    return _this3;
-  }
-
-  /* jshint ignore:start */
-
-  _createClass(_class, [{
-    key: 'render',
-
-    /* jshint ignore:end */
-
-    value: function render() {
-      /* jshint ignore:start */
-      if (this.state.complete) {
-        return _react2.default.createElement(RegisterComplete, { activation: this.state.complete.activation,
-          username: this.state.complete.username,
-          email: this.state.complete.email });
-      } else {
-        return _react2.default.createElement(RegisterForm, { callback: this.completeRegistration });
-      }
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../index":85,"../services/ajax":91,"../services/auth":92,"../services/captcha":93,"../services/modal":97,"../services/snackbar":99,"../utils/banned-page":102,"../utils/validators":109,"./button":51,"./form":58,"./form-group":57,"./password-strength":67,"react":"react"}],70:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.LinkSent = exports.RequestLinkForm = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _index = require('../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _button = require('./button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _form = require('./form');
-
-var _form2 = _interopRequireDefault(_form);
-
-var _ajax = require('../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _snackbar = require('../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _validators = require('../utils/validators');
-
-var validators = _interopRequireWildcard(_validators);
-
-var _bannedPage = require('../utils/banned-page');
-
-var _bannedPage2 = _interopRequireDefault(_bannedPage);
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-
-var RequestLinkForm = exports.RequestLinkForm = function (_Form) {
-  _inherits(RequestLinkForm, _Form);
-
-  function RequestLinkForm(props) {
-    _classCallCheck(this, RequestLinkForm);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestLinkForm).call(this, props));
-
-    _this.state = {
-      'isLoading': false,
-
-      'email': '',
-
-      'validators': {
-        'email': [validators.email()]
-      }
-    };
-    return _this;
-  }
-
-  _createClass(RequestLinkForm, [{
-    key: 'clean',
-    value: function clean() {
-      if (this.isValid()) {
-        return true;
-      } else {
-        _snackbar2.default.error(gettext("Enter a valid email address."));
-        return false;
-      }
-    }
-  }, {
-    key: 'send',
-    value: function send() {
-      return _ajax2.default.post(_index2.default.get('SEND_ACTIVATION_API'), {
-        'email': this.state.email
-      });
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess(apiResponse) {
-      this.props.callback(apiResponse);
-    }
-  }, {
-    key: 'handleError',
-    value: function handleError(rejection) {
-      if (['already_active', 'inactive_admin'].indexOf(rejection.code) > -1) {
-        _snackbar2.default.info(rejection.detail);
-      } else if (rejection.status === 403 && rejection.ban) {
-        (0, _bannedPage2.default)(rejection.ban);
-      } else {
-        _snackbar2.default.apiError(rejection);
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'well well-form well-form-request-activation-link' },
-        _react2.default.createElement(
-          'form',
-          { onSubmit: this.handleSubmit },
-          _react2.default.createElement(
-            'div',
-            { className: 'form-group' },
-            _react2.default.createElement(
-              'div',
-              { className: 'control-input' },
-              _react2.default.createElement('input', { type: 'text', className: 'form-control',
-                placeholder: gettext("Your e-mail address"),
-                disabled: this.state.isLoading,
-                onChange: this.bindInput('email'),
-                value: this.state.email })
-            )
-          ),
-          _react2.default.createElement(
-            _button2.default,
-            { className: 'btn-primary btn-block',
-              loading: this.state.isLoading },
-            gettext("Send link")
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return RequestLinkForm;
-}(_form2.default);
-
-var LinkSent = exports.LinkSent = function (_React$Component) {
-  _inherits(LinkSent, _React$Component);
-
-  function LinkSent() {
-    _classCallCheck(this, LinkSent);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));
-  }
-
-  _createClass(LinkSent, [{
-    key: 'getMessage',
-    value: function getMessage() {
-      return interpolate(gettext("Activation link was sent to %(email)s"), {
-        email: this.props.user.email
-      }, true);
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'well well-form well-form-request-activation-link well-done' },
-        _react2.default.createElement(
-          'div',
-          { className: 'done-message' },
-          _react2.default.createElement(
-            'div',
-            { className: 'message-icon' },
-            _react2.default.createElement(
-              'span',
-              { className: 'material-icon' },
-              'check'
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'message-body' },
-            _react2.default.createElement(
-              'p',
-              null,
-              this.getMessage()
-            )
-          ),
-          _react2.default.createElement(
-            'button',
-            { type: 'button', className: 'btn btn-primary btn-block',
-              onClick: this.props.callback },
-            gettext("Request another link")
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return LinkSent;
-}(_react2.default.Component);
-
-var _class = function (_React$Component2) {
-  _inherits(_class, _React$Component2);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this3.complete = function (apiResponse) {
-      _this3.setState({
-        complete: apiResponse
-      });
-    };
-
-    _this3.reset = function () {
-      _this3.setState({
-        complete: false
-      });
-    };
-
-    _this3.state = {
-      complete: false
-    };
-    return _this3;
-  }
-
-  /* jshint ignore:start */
-
-  _createClass(_class, [{
-    key: 'render',
-
-    /* jshint ignore:end */
-
-    value: function render() {
-      /* jshint ignore:start */
-      if (this.state.complete) {
-        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });
-      } else {
-        return _react2.default.createElement(RequestLinkForm, { callback: this.complete });
-      };
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../index":85,"../services/ajax":91,"../services/snackbar":99,"../utils/banned-page":102,"../utils/validators":109,"./button":51,"./form":58,"react":"react"}],71:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.AccountInactivePage = exports.LinkSent = exports.RequestResetForm = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactDom = require('react-dom');
-
-var _reactDom2 = _interopRequireDefault(_reactDom);
-
-var _index = require('../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _button = require('./button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _form = require('./form');
-
-var _form2 = _interopRequireDefault(_form);
-
-var _ajax = require('../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _snackbar = require('../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _validators = require('../utils/validators');
-
-var validators = _interopRequireWildcard(_validators);
-
-var _bannedPage = require('../utils/banned-page');
-
-var _bannedPage2 = _interopRequireDefault(_bannedPage);
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-var RequestResetForm = exports.RequestResetForm = function (_Form) {
-  _inherits(RequestResetForm, _Form);
-
-  function RequestResetForm(props) {
-    _classCallCheck(this, RequestResetForm);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestResetForm).call(this, props));
-
-    _this.state = {
-      'isLoading': false,
-
-      'email': '',
-
-      'validators': {
-        'email': [validators.email()]
-      }
-    };
-    return _this;
-  }
-
-  _createClass(RequestResetForm, [{
-    key: 'clean',
-    value: function clean() {
-      if (this.isValid()) {
-        return true;
-      } else {
-        _snackbar2.default.error(gettext("Enter a valid email address."));
-        return false;
-      }
-    }
-  }, {
-    key: 'send',
-    value: function send() {
-      return _ajax2.default.post(_index2.default.get('SEND_PASSWORD_RESET_API'), {
-        'email': this.state.email
-      });
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess(apiResponse) {
-      this.props.callback(apiResponse);
-    }
-  }, {
-    key: 'handleError',
-    value: function handleError(rejection) {
-      if (['inactive_user', 'inactive_admin'].indexOf(rejection.code) > -1) {
-        this.props.showInactivePage(rejection);
-      } else if (rejection.status === 403 && rejection.ban) {
-        (0, _bannedPage2.default)(rejection.ban);
-      } else {
-        _snackbar2.default.apiError(rejection);
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'well well-form well-form-request-password-reset' },
-        _react2.default.createElement(
-          'form',
-          { onSubmit: this.handleSubmit },
-          _react2.default.createElement(
-            'div',
-            { className: 'form-group' },
-            _react2.default.createElement(
-              'div',
-              { className: 'control-input' },
-              _react2.default.createElement('input', { type: 'text', className: 'form-control',
-                placeholder: gettext("Your e-mail address"),
-                disabled: this.state.isLoading,
-                onChange: this.bindInput('email'),
-                value: this.state.email })
-            )
-          ),
-          _react2.default.createElement(
-            _button2.default,
-            { className: 'btn-primary btn-block',
-              loading: this.state.isLoading },
-            gettext("Send link")
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return RequestResetForm;
-}(_form2.default);
-
-var LinkSent = exports.LinkSent = function (_React$Component) {
-  _inherits(LinkSent, _React$Component);
-
-  function LinkSent() {
-    _classCallCheck(this, LinkSent);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));
-  }
-
-  _createClass(LinkSent, [{
-    key: 'getMessage',
-    value: function getMessage() {
-      return interpolate(gettext("Reset password link was sent to %(email)s"), {
-        email: this.props.user.email
-      }, true);
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'well well-form well-form-request-password-reset well-done' },
-        _react2.default.createElement(
-          'div',
-          { className: 'done-message' },
-          _react2.default.createElement(
-            'div',
-            { className: 'message-icon' },
-            _react2.default.createElement(
-              'span',
-              { className: 'material-icon' },
-              'check'
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'message-body' },
-            _react2.default.createElement(
-              'p',
-              null,
-              this.getMessage()
-            )
-          ),
-          _react2.default.createElement(
-            'button',
-            { type: 'button', className: 'btn btn-primary btn-block',
-              onClick: this.props.callback },
-            gettext("Request another link")
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return LinkSent;
-}(_react2.default.Component);
-
-var AccountInactivePage = exports.AccountInactivePage = function (_React$Component2) {
-  _inherits(AccountInactivePage, _React$Component2);
-
-  function AccountInactivePage() {
-    _classCallCheck(this, AccountInactivePage);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(AccountInactivePage).apply(this, arguments));
-  }
-
-  _createClass(AccountInactivePage, [{
-    key: 'getActivateButton',
-    value: function getActivateButton() {
-      if (this.props.activation === 'inactive_user') {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'p',
-          null,
-          _react2.default.createElement(
-            'a',
-            { href: _index2.default.get('REQUEST_ACTIVATION_URL') },
-            gettext("Activate your account.")
-          )
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'page page-message page-message-info page-forgotten-password-inactive' },
-        _react2.default.createElement(
-          'div',
-          { className: 'container' },
-          _react2.default.createElement(
-            'div',
-            { className: 'message-panel' },
-            _react2.default.createElement(
-              'div',
-              { className: 'message-icon' },
-              _react2.default.createElement(
-                'span',
-                { className: 'material-icon' },
-                'info_outline'
-              )
-            ),
-            _react2.default.createElement(
-              'div',
-              { className: 'message-body' },
-              _react2.default.createElement(
-                'p',
-                { className: 'lead' },
-                gettext("Your account is inactive.")
-              ),
-              _react2.default.createElement(
-                'p',
-                null,
-                this.props.message
-              ),
-              this.getActivateButton()
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return AccountInactivePage;
-}(_react2.default.Component);
-
-var _class = function (_React$Component3) {
-  _inherits(_class, _React$Component3);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this4.complete = function (apiResponse) {
-      _this4.setState({
-        complete: apiResponse
-      });
-    };
-
-    _this4.reset = function () {
-      _this4.setState({
-        complete: false
-      });
-    };
-
-    _this4.state = {
-      complete: false
-    };
-    return _this4;
-  }
-
-  /* jshint ignore:start */
-
-  _createClass(_class, [{
-    key: 'showInactivePage',
-    value: function showInactivePage(apiResponse) {
-      _reactDom2.default.render(_react2.default.createElement(AccountInactivePage, { activation: apiResponse.code,
-        message: apiResponse.detail }), document.getElementById('page-mount'));
-    }
-    /* jshint ignore:end */
-
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      if (this.state.complete) {
-        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });
-      } else {
-        return _react2.default.createElement(RequestResetForm, { callback: this.complete,
-          showInactivePage: this.showInactivePage });
-      };
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../index":85,"../services/ajax":91,"../services/snackbar":99,"../utils/banned-page":102,"../utils/validators":109,"./button":51,"./form":58,"react":"react","react-dom":"react-dom"}],72:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.PasswordChangedPage = exports.ResetPasswordForm = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactDom = require('react-dom');
-
-var _reactDom2 = _interopRequireDefault(_reactDom);
-
-var _index = require('../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _button = require('./button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _form = require('./form');
-
-var _form2 = _interopRequireDefault(_form);
-
-var _signIn = require('./sign-in.js');
-
-var _signIn2 = _interopRequireDefault(_signIn);
-
-var _ajax = require('../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _auth = require('../services/auth');
-
-var _auth2 = _interopRequireDefault(_auth);
-
-var _modal = require('../services/modal');
-
-var _modal2 = _interopRequireDefault(_modal);
-
-var _snackbar = require('../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _validators = require('../utils/validators');
-
-var validators = _interopRequireWildcard(_validators);
-
-var _bannedPage = require('../utils/banned-page');
-
-var _bannedPage2 = _interopRequireDefault(_bannedPage);
-
-function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-var ResetPasswordForm = exports.ResetPasswordForm = function (_Form) {
-  _inherits(ResetPasswordForm, _Form);
-
-  function ResetPasswordForm(props) {
-    _classCallCheck(this, ResetPasswordForm);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ResetPasswordForm).call(this, props));
-
-    _this.state = {
-      'isLoading': false,
-
-      'password': '',
-
-      'validators': {
-        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))]
-      }
-    };
-    return _this;
-  }
-
-  _createClass(ResetPasswordForm, [{
-    key: 'clean',
-    value: function clean() {
-      if (this.isValid()) {
-        return true;
-      } else {
-        if (this.state.password.trim().length) {
-          _snackbar2.default.error(this.state.errors.password[0]);
-        } else {
-          _snackbar2.default.error(gettext("Enter new password."));
-        }
-        return false;
-      }
-    }
-  }, {
-    key: 'send',
-    value: function send() {
-      return _ajax2.default.post(_index2.default.get('CHANGE_PASSWORD_API'), {
-        'password': this.state.password
-      });
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess(apiResponse) {
-      this.props.callback(apiResponse);
-    }
-  }, {
-    key: 'handleError',
-    value: function handleError(rejection) {
-      if (rejection.status === 403 && rejection.ban) {
-        (0, _bannedPage2.default)(rejection.ban);
-      } else {
-        _snackbar2.default.apiError(rejection);
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'well well-form well-form-reset-password' },
-        _react2.default.createElement(
-          'form',
-          { onSubmit: this.handleSubmit },
-          _react2.default.createElement(
-            'div',
-            { className: 'form-group' },
-            _react2.default.createElement(
-              'div',
-              { className: 'control-input' },
-              _react2.default.createElement('input', { type: 'password', className: 'form-control',
-                placeholder: gettext("Enter new password"),
-                disabled: this.state.isLoading,
-                onChange: this.bindInput('password'),
-                value: this.state.password })
-            )
-          ),
-          _react2.default.createElement(
-            _button2.default,
-            { className: 'btn-primary btn-block',
-              loading: this.state.isLoading },
-            gettext("Change password")
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ResetPasswordForm;
-}(_form2.default);
-
-var PasswordChangedPage = exports.PasswordChangedPage = function (_React$Component) {
-  _inherits(PasswordChangedPage, _React$Component);
-
-  function PasswordChangedPage() {
-    _classCallCheck(this, PasswordChangedPage);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(PasswordChangedPage).apply(this, arguments));
-  }
-
-  _createClass(PasswordChangedPage, [{
-    key: 'getMessage',
-    value: function getMessage() {
-      return interpolate(gettext("%(username)s, your password has been changed successfully."), {
-        username: this.props.user.username
-      }, true);
-    }
-  }, {
-    key: 'showSignIn',
-    value: function showSignIn() {
-      _modal2.default.show(_signIn2.default);
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'page page-message page-message-success page-forgotten-password-changed' },
-        _react2.default.createElement(
-          'div',
-          { className: 'container' },
-          _react2.default.createElement(
-            'div',
-            { className: 'message-panel' },
-            _react2.default.createElement(
-              'div',
-              { className: 'message-icon' },
-              _react2.default.createElement(
-                'span',
-                { className: 'material-icon' },
-                'check'
-              )
-            ),
-            _react2.default.createElement(
-              'div',
-              { className: 'message-body' },
-              _react2.default.createElement(
-                'p',
-                { className: 'lead' },
-                this.getMessage()
-              ),
-              _react2.default.createElement(
-                'p',
-                null,
-                gettext("You will have to sign in using new password before continuing.")
-              ),
-              _react2.default.createElement(
-                'p',
-                null,
-                _react2.default.createElement(
-                  'button',
-                  { type: 'button', className: 'btn btn-primary', onClick: this.showSignIn },
-                  gettext("Sign in")
-                )
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return PasswordChangedPage;
-}(_react2.default.Component);
-
-var _class = function (_React$Component2) {
-  _inherits(_class, _React$Component2);
-
-  function _class() {
-    var _Object$getPrototypeO;
-
-    var _temp, _this3, _ret;
-
-    _classCallCheck(this, _class);
-
-    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    return _ret = (_temp = (_this3 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this3), _this3.complete = function (apiResponse) {
-      _auth2.default.softSignOut();
-
-      // nuke "redirect_to" field so we don't end
-      // coming back to error page after sign in
-      $('#hidden-login-form input[name="redirect_to"]').remove();
-
-      _reactDom2.default.render(_react2.default.createElement(PasswordChangedPage, { user: apiResponse }), document.getElementById('page-mount'));
-    }, _temp), _possibleConstructorReturn(_this3, _ret);
-  }
-  /* jshint ignore:start */
-
-  _createClass(_class, [{
-    key: 'render',
-
-    /* jshint ignore:end */
-
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(ResetPasswordForm, { callback: this.complete });
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../index":85,"../services/ajax":91,"../services/auth":92,"../services/modal":97,"../services/snackbar":99,"../utils/banned-page":102,"../utils/validators":109,"./button":51,"./form":58,"./sign-in.js":74,"react":"react","react-dom":"react-dom"}],73:[function(require,module,exports){
-"use strict";
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require("react");
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    var _Object$getPrototypeO;
-
-    var _temp, _this, _ret;
-
-    _classCallCheck(this, _class);
-
-    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.change = function (value) {
-      return function () {
-        _this.props.onChange({
-          target: {
-            value: value
-          }
-        });
-      };
-    }, _temp), _possibleConstructorReturn(_this, _ret);
-  }
-
-  _createClass(_class, [{
-    key: "getChoice",
-    value: function getChoice() {
-      var _this2 = this;
-
-      var choice = null;
-      this.props.choices.map(function (item) {
-        if (item.value === _this2.props.value) {
-          choice = item;
-        }
-      });
-      return choice;
-    }
-  }, {
-    key: "getIcon",
-    value: function getIcon() {
-      return this.getChoice().icon;
-    }
-  }, {
-    key: "getLabel",
-    value: function getLabel() {
-      return this.getChoice().label;
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: "render",
-
-    /* jshint ignore:end */
-
-    value: function render() {
-      var _this3 = this;
-
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        "div",
-        { className: "btn-group btn-select-group" },
-        _react2.default.createElement(
-          "button",
-          { type: "button",
-            className: "btn btn-select dropdown-toggle",
-            id: this.props.id || null,
-            "data-toggle": "dropdown",
-            "aria-haspopup": "true",
-            "aria-expanded": "false",
-            "aria-describedby": this.props['aria-describedby'] || null,
-            disabled: this.props.disabled || false },
-          _react2.default.createElement(
-            "span",
-            { className: "material-icon" },
-            this.getIcon()
-          ),
-          this.getLabel()
-        ),
-        _react2.default.createElement(
-          "ul",
-          { className: "dropdown-menu" },
-          this.props.choices.map(function (item, i) {
-            return _react2.default.createElement(
-              "li",
-              { key: i },
-              _react2.default.createElement(
-                "button",
-                { type: "button", className: "btn-link",
-                  onClick: _this3.change(item.value) },
-                _react2.default.createElement(
-                  "span",
-                  { className: "material-icon" },
-                  item.icon
-                ),
-                item.label
-              )
-            );
-          })
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"react":"react"}],74:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _index = require('../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _button = require('./button');
-
-var _button2 = _interopRequireDefault(_button);
-
-var _form = require('./form');
-
-var _form2 = _interopRequireDefault(_form);
-
-var _ajax = require('../services/ajax');
-
-var _ajax2 = _interopRequireDefault(_ajax);
-
-var _modal = require('../services/modal');
-
-var _modal2 = _interopRequireDefault(_modal);
-
-var _snackbar = require('../services/snackbar');
-
-var _snackbar2 = _interopRequireDefault(_snackbar);
-
-var _bannedPage = require('../utils/banned-page');
-
-var _bannedPage2 = _interopRequireDefault(_bannedPage);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-
-var _class = function (_Form) {
-  _inherits(_class, _Form);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this.state = {
-      'isLoading': false,
-      'showActivation': false,
-
-      'username': '',
-      'password': '',
-
-      'validators': {
-        'username': [],
-        'password': []
-      }
-    };
-    return _this;
-  }
-
-  _createClass(_class, [{
-    key: 'clean',
-    value: function clean() {
-      if (!this.isValid()) {
-        _snackbar2.default.error(gettext("Fill out both fields."));
-        return false;
-      } else {
-        return true;
-      }
-    }
-  }, {
-    key: 'send',
-    value: function send() {
-      return _ajax2.default.post(_index2.default.get('AUTH_API'), {
-        'username': this.state.username,
-        'password': this.state.password
-      });
-    }
-  }, {
-    key: 'handleSuccess',
-    value: function handleSuccess() {
-      var form = $('#hidden-login-form');
-
-      form.append('<input type="text" name="username" />');
-      form.append('<input type="password" name="password" />');
-
-      // fill out form with user credentials and submit it, this will tell
-      // Misago to redirect user back to right page, and will trigger browser's
-      // key ring feature
-      form.find('input[type="hidden"]').val(_ajax2.default.getCsrfToken());
-      form.find('input[name="redirect_to"]').val(window.location.pathname);
-      form.find('input[name="username"]').val(this.state.username);
-      form.find('input[name="password"]').val(this.state.password);
-      form.submit();
-
-      // keep form loading
-      this.setState({
-        'isLoading': true
-      });
-    }
-  }, {
-    key: 'handleError',
-    value: function handleError(rejection) {
-      if (rejection.status === 400) {
-        if (rejection.code === 'inactive_admin') {
-          _snackbar2.default.info(rejection.detail);
-        } else if (rejection.code === 'inactive_user') {
-          _snackbar2.default.info(rejection.detail);
-          this.setState({
-            'showActivation': true
-          });
-        } else if (rejection.code === 'banned') {
-          (0, _bannedPage2.default)(rejection.detail);
-          _modal2.default.hide();
-        } else {
-          _snackbar2.default.error(rejection.detail);
-        }
-      } else if (rejection.status === 403 && rejection.ban) {
-        (0, _bannedPage2.default)(rejection.ban);
-        _modal2.default.hide();
-      } else {
-        _snackbar2.default.apiError(rejection);
-      }
-    }
-  }, {
-    key: 'getActivationButton',
-    value: function getActivationButton() {
-      if (this.state.showActivation) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'a',
-          { href: _index2.default.get('REQUEST_ACTIVATION_URL'),
-            className: 'btn btn-success btn-block' },
-          gettext("Activate account")
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'modal-dialog modal-sm modal-sign-in',
-          role: 'document' },
-        _react2.default.createElement(
-          'div',
-          { className: 'modal-content' },
-          _react2.default.createElement(
-            'div',
-            { className: 'modal-header' },
-            _react2.default.createElement(
-              'button',
-              { type: 'button', className: 'close', 'data-dismiss': 'modal',
-                'aria-label': gettext("Close") },
-              _react2.default.createElement(
-                'span',
-                { 'aria-hidden': 'true' },
-                '×'
-              )
-            ),
-            _react2.default.createElement(
-              'h4',
-              { className: 'modal-title' },
-              gettext("Sign in")
-            )
-          ),
-          _react2.default.createElement(
-            'form',
-            { onSubmit: this.handleSubmit },
-            _react2.default.createElement(
-              'div',
-              { className: 'modal-body' },
-              _react2.default.createElement(
-                'div',
-                { className: 'form-group' },
-                _react2.default.createElement(
-                  'div',
-                  { className: 'control-input' },
-                  _react2.default.createElement('input', { id: 'id_username', className: 'form-control', type: 'text',
-                    disabled: this.state.isLoading,
-                    placeholder: gettext("Username or e-mail"),
-                    onChange: this.bindInput('username'),
-                    value: this.state.username })
-                )
-              ),
-              _react2.default.createElement(
-                'div',
-                { className: 'form-group' },
-                _react2.default.createElement(
-                  'div',
-                  { className: 'control-input' },
-                  _react2.default.createElement('input', { id: 'id_password', className: 'form-control', type: 'password',
-                    disabled: this.state.isLoading,
-                    placeholder: gettext("Password"),
-                    onChange: this.bindInput('password'),
-                    value: this.state.password })
-                )
-              )
-            ),
-            _react2.default.createElement(
-              'div',
-              { className: 'modal-footer' },
-              this.getActivationButton(),
-              _react2.default.createElement(
-                _button2.default,
-                { className: 'btn-primary btn-block',
-                  loading: this.state.isLoading },
-                gettext("Sign in")
-              ),
-              _react2.default.createElement(
-                'a',
-                { href: _index2.default.get('FORGOTTEN_PASSWORD_URL'),
-                  className: 'btn btn-default btn-block' },
-                gettext("Forgot password?")
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_form2.default);
-
-exports.default = _class;
-
-},{"../index":85,"../services/ajax":91,"../services/modal":97,"../services/snackbar":99,"../utils/banned-page":102,"./button":51,"./form":58,"react":"react"}],75:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.Snackbar = undefined;
-exports.select = select;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-/* jshint ignore:start */
-var TYPES_CLASSES = {
-  'info': 'alert-info',
-  'success': 'alert-success',
-  'warning': 'alert-warning',
-  'error': 'alert-danger'
-};
-/* jshint ignore:end */
-
-var Snackbar = exports.Snackbar = function (_React$Component) {
-  _inherits(Snackbar, _React$Component);
-
-  function Snackbar() {
-    _classCallCheck(this, Snackbar);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(Snackbar).apply(this, arguments));
-  }
-
-  _createClass(Snackbar, [{
-    key: 'getSnackbarClass',
-    value: function getSnackbarClass() {
-      var snackbarClass = 'alerts-snackbar';
-      if (this.props.isVisible) {
-        snackbarClass += ' in';
-      } else {
-        snackbarClass += ' out';
-      }
-      return snackbarClass;
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: this.getSnackbarClass() },
-        _react2.default.createElement(
-          'p',
-          { className: 'alert ' + TYPES_CLASSES[this.props.type] },
-          this.props.message
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return Snackbar;
-}(_react2.default.Component);
-
-function select(state) {
-  return state.snackbar;
-}
-
-},{"react":"react"}],76:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.CompactGuestNav = exports.GuestNav = exports.GuestMenu = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _avatar = require('../avatar');
-
-var _avatar2 = _interopRequireDefault(_avatar);
-
-var _registerButton = require('../register-button');
-
-var _registerButton2 = _interopRequireDefault(_registerButton);
-
-var _signIn = require('../sign-in.js');
-
-var _signIn2 = _interopRequireDefault(_signIn);
-
-var _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');
-
-var _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);
-
-var _modal = require('../../services/modal');
-
-var _modal2 = _interopRequireDefault(_modal);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-
-var GuestMenu = exports.GuestMenu = function (_React$Component) {
-  _inherits(GuestMenu, _React$Component);
-
-  function GuestMenu() {
-    _classCallCheck(this, GuestMenu);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestMenu).apply(this, arguments));
-  }
-
-  _createClass(GuestMenu, [{
-    key: 'showSignInModal',
-    value: function showSignInModal() {
-      _modal2.default.show(_signIn2.default);
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'ul',
-        { className: 'dropdown-menu user-dropdown dropdown-menu-right',
-          role: 'menu' },
-        _react2.default.createElement(
-          'li',
-          { className: 'guest-preview' },
-          _react2.default.createElement(
-            'h4',
-            null,
-            gettext("You are browsing as guest.")
-          ),
-          _react2.default.createElement(
-            'p',
-            null,
-            gettext('Sign in or register to start and participate in discussions.')
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'row' },
-            _react2.default.createElement(
-              'div',
-              { className: 'col-xs-6' },
-              _react2.default.createElement(
-                'button',
-                { type: 'button', className: 'btn btn-default btn-block',
-                  onClick: this.showSignInModal },
-                gettext("Sign in")
-              )
-            ),
-            _react2.default.createElement(
-              'div',
-              { className: 'col-xs-6' },
-              _react2.default.createElement(
-                _registerButton2.default,
-                { className: 'btn-primary btn-block' },
-                gettext("Register")
-              )
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return GuestMenu;
-}(_react2.default.Component);
-
-var GuestNav = exports.GuestNav = function (_GuestMenu) {
-  _inherits(GuestNav, _GuestMenu);
-
-  function GuestNav() {
-    _classCallCheck(this, GuestNav);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestNav).apply(this, arguments));
-  }
-
-  _createClass(GuestNav, [{
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'nav nav-guest' },
-        _react2.default.createElement(
-          'button',
-          { type: 'button', className: 'btn navbar-btn btn-default',
-            onClick: this.showSignInModal },
-          gettext("Sign in")
-        ),
-        _react2.default.createElement(
-          _registerButton2.default,
-          { className: 'navbar-btn btn-primary' },
-          gettext("Register")
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return GuestNav;
-}(GuestMenu);
-
-var CompactGuestNav = exports.CompactGuestNav = function (_React$Component2) {
-  _inherits(CompactGuestNav, _React$Component2);
-
-  function CompactGuestNav() {
-    _classCallCheck(this, CompactGuestNav);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactGuestNav).apply(this, arguments));
-  }
-
-  _createClass(CompactGuestNav, [{
-    key: 'showGuestMenu',
-    value: function showGuestMenu() {
-      _mobileNavbarDropdown2.default.show(GuestMenu);
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'button',
-        { type: 'button', onClick: this.showGuestMenu },
-        _react2.default.createElement(_avatar2.default, { size: '64' })
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return CompactGuestNav;
-}(_react2.default.Component);
-
-},{"../../services/mobile-navbar-dropdown":96,"../../services/modal":97,"../avatar":49,"../register-button":68,"../sign-in.js":74,"react":"react"}],77:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.CompactUserMenu = exports.UserMenu = undefined;
-exports.select = select;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _guestNav = require('./guest-nav');
-
-var _userNav = require('./user-nav');
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-
-// jshint ignore:line
-
-var UserMenu = exports.UserMenu = function (_React$Component) {
-  _inherits(UserMenu, _React$Component);
-
-  function UserMenu() {
-    _classCallCheck(this, UserMenu);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));
-  }
-
-  _createClass(UserMenu, [{
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      if (this.props.isAuthenticated) {
-        return _react2.default.createElement(_userNav.UserNav, { user: this.props.user });
-      } else {
-        return _react2.default.createElement(_guestNav.GuestNav, null);
-      }
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return UserMenu;
-}(_react2.default.Component);
-
-var CompactUserMenu = exports.CompactUserMenu = function (_React$Component2) {
-  _inherits(CompactUserMenu, _React$Component2);
-
-  function CompactUserMenu() {
-    _classCallCheck(this, CompactUserMenu);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserMenu).apply(this, arguments));
-  }
-
-  _createClass(CompactUserMenu, [{
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      if (this.props.isAuthenticated) {
-        return _react2.default.createElement(_userNav.CompactUserNav, { user: this.props.user });
-      } else {
-        return _react2.default.createElement(_guestNav.CompactGuestNav, null);
-      }
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return CompactUserMenu;
-}(_react2.default.Component);
-
-function select(state) {
-  return state.auth;
-}
-
-},{"./guest-nav":76,"./user-nav":78,"react":"react"}],78:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.CompactUserNav = exports.UserNav = exports.UserMenu = undefined;
-exports.selectUserMenu = selectUserMenu;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactRedux = require('react-redux');
-
-var _avatar = require('../avatar');
-
-var _avatar2 = _interopRequireDefault(_avatar);
-
-var _root = require('../change-avatar/root');
-
-var _root2 = _interopRequireDefault(_root);
-
-var _index = require('../../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');
-
-var _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);
-
-var _modal = require('../../services/modal');
-
-var _modal2 = _interopRequireDefault(_modal);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-var UserMenu = exports.UserMenu = function (_React$Component) {
-  _inherits(UserMenu, _React$Component);
-
-  function UserMenu() {
-    _classCallCheck(this, UserMenu);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));
-  }
-
-  _createClass(UserMenu, [{
-    key: 'logout',
-    value: function logout() {
-      var decision = confirm(gettext("Are you sure you want to sign out?"));
-      if (decision) {
-        $('#hidden-logout-form').submit();
-      }
-    }
-  }, {
-    key: 'changeAvatar',
-    value: function changeAvatar() {
-      _modal2.default.show((0, _reactRedux.connect)(_root.select)(_root2.default));
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'ul',
-        { className: 'dropdown-menu user-dropdown dropdown-menu-right',
-          role: 'menu' },
-        _react2.default.createElement(
-          'li',
-          { className: 'dropdown-header' },
-          _react2.default.createElement(
-            'strong',
-            null,
-            this.props.user.username
-          )
-        ),
-        _react2.default.createElement('li', { className: 'divider' }),
-        _react2.default.createElement(
-          'li',
-          null,
-          _react2.default.createElement(
-            'a',
-            { href: this.props.user.absolute_url },
-            _react2.default.createElement(
-              'span',
-              { className: 'material-icon' },
-              'account_circle'
-            ),
-            gettext("See your profile")
-          )
-        ),
-        _react2.default.createElement(
-          'li',
-          null,
-          _react2.default.createElement(
-            'a',
-            { href: _index2.default.get('USERCP_URL') },
-            _react2.default.createElement(
-              'span',
-              { className: 'material-icon' },
-              'done_all'
-            ),
-            gettext("Change options")
-          )
-        ),
-        _react2.default.createElement(
-          'li',
-          null,
-          _react2.default.createElement(
-            'button',
-            { type: 'button', className: 'btn-link', onClick: this.changeAvatar },
-            _react2.default.createElement(
-              'span',
-              { className: 'material-icon' },
-              'portrait'
-            ),
-            gettext("Change avatar")
-          )
-        ),
-        _react2.default.createElement('li', { className: 'divider' }),
-        _react2.default.createElement(
-          'li',
-          { className: 'dropdown-footer' },
-          _react2.default.createElement(
-            'button',
-            { type: 'button', className: 'btn btn-default btn-block',
-              onClick: this.logout },
-            gettext("Log out")
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return UserMenu;
-}(_react2.default.Component);
-
-var UserNav = exports.UserNav = function (_React$Component2) {
-  _inherits(UserNav, _React$Component2);
-
-  function UserNav() {
-    _classCallCheck(this, UserNav);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserNav).apply(this, arguments));
-  }
-
-  _createClass(UserNav, [{
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'ul',
-        { className: 'ul nav navbar-nav nav-user' },
-        _react2.default.createElement(
-          'li',
-          { className: 'dropdown' },
-          _react2.default.createElement(
-            'a',
-            { href: this.props.user.absolute_url, className: 'dropdown-toggle',
-              'data-toggle': 'dropdown', 'aria-haspopup': 'true', 'aria-expanded': 'false',
-              role: 'button' },
-            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })
-          ),
-          _react2.default.createElement(UserMenu, { user: this.props.user })
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return UserNav;
-}(_react2.default.Component);
-
-function selectUserMenu(state) {
-  return { user: state.auth.user };
-}
-
-var CompactUserNav = exports.CompactUserNav = function (_React$Component3) {
-  _inherits(CompactUserNav, _React$Component3);
-
-  function CompactUserNav() {
-    _classCallCheck(this, CompactUserNav);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserNav).apply(this, arguments));
-  }
-
-  _createClass(CompactUserNav, [{
-    key: 'showUserMenu',
-    value: function showUserMenu() {
-      _mobileNavbarDropdown2.default.showConnected('user-menu', (0, _reactRedux.connect)(selectUserMenu)(UserMenu));
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'button',
-        { type: 'button', onClick: this.showUserMenu },
-        _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return CompactUserNav;
-}(_react2.default.Component);
-
-},{"../../index":85,"../../services/mobile-navbar-dropdown":96,"../../services/modal":97,"../avatar":49,"../change-avatar/root":55,"react":"react","react-redux":"react-redux"}],79:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.StatusLabel = exports.StatusIcon = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: 'getClass',
-    value: function getClass() {
-      var status = '';
-      if (this.props.status.is_banned) {
-        status = 'banned';
-      } else if (this.props.status.is_hidden) {
-        status = 'offline';
-      } else if (this.props.status.is_online_hidden) {
-        status = 'online';
-      } else if (this.props.status.is_offline_hidden) {
-        status = 'offline';
-      } else if (this.props.status.is_online) {
-        status = 'online';
-      } else if (this.props.status.is_offline) {
-        status = 'offline';
-      }
-
-      return 'user-status user-' + status;
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'span',
-        { className: this.getClass() },
-        this.props.children
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-var StatusIcon = exports.StatusIcon = function (_React$Component2) {
-  _inherits(StatusIcon, _React$Component2);
-
-  function StatusIcon() {
-    _classCallCheck(this, StatusIcon);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusIcon).apply(this, arguments));
-  }
-
-  _createClass(StatusIcon, [{
-    key: 'getIcon',
-    value: function getIcon() {
-      if (this.props.status.is_banned) {
-        return 'remove_circle_outline';
-      } else if (this.props.status.is_hidden) {
-        return 'help_outline';
-      } else if (this.props.status.is_online_hidden) {
-        return 'label';
-      } else if (this.props.status.is_offline_hidden) {
-        return 'label_outline';
-      } else if (this.props.status.is_online) {
-        return 'lens';
-      } else if (this.props.status.is_offline) {
-        return 'panorama_fish_eye';
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'span',
-        { className: 'status-icon' },
-        this.getIcon()
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return StatusIcon;
-}(_react2.default.Component);
-
-var StatusLabel = exports.StatusLabel = function (_React$Component3) {
-  _inherits(StatusLabel, _React$Component3);
-
-  function StatusLabel() {
-    _classCallCheck(this, StatusLabel);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusLabel).apply(this, arguments));
-  }
-
-  _createClass(StatusLabel, [{
-    key: 'getHelp',
-    value: function getHelp() {
-      if (this.props.status.is_banned) {
-        if (this.props.status.banned_until) {
-          return interpolate(gettext("%(username)s is hiding banned until %(ban_expires)s"), {
-            username: this.props.user.username,
-            ban_expires: this.props.status.banned_until.format('LL, LT')
-          }, true);
-        } else {
-          return interpolate(gettext("%(username)s is hiding banned"), {
-            username: this.props.user.username
-          }, true);
-        }
-      } else if (this.props.status.is_hidden) {
-        return interpolate(gettext("%(username)s is hiding activity"), {
-          username: this.props.user.username
-        }, true);
-      } else if (this.props.status.is_online_hidden) {
-        return interpolate(gettext("%(username)s is online (hidden)"), {
-          username: this.props.user.username
-        }, true);
-      } else if (this.props.status.is_offline_hidden) {
-        return interpolate(gettext("%(username)s was last seen %(last_click)s (hidden)"), {
-          username: this.props.user.username,
-          last_click: this.props.state.lastClick.fromNow()
-        }, true);
-      } else if (this.props.status.is_online) {
-        return interpolate(gettext("%(username)s is online"), {
-          username: this.props.user.username
-        }, true);
-      } else if (this.props.status.is_offline) {
-        return interpolate(gettext("%(username)s was last seen %(last_click)s"), {
-          username: this.props.user.username,
-          last_click: this.props.state.lastClick.fromNow()
-        }, true);
-      }
-    }
-  }, {
-    key: 'getLabel',
-    value: function getLabel() {
-      if (this.props.status.is_banned) {
-        return gettext("Banned");
-      } else if (this.props.status.is_hidden) {
-        return gettext("Hiding activity");
-      } else if (this.props.status.is_online_hidden) {
-        return gettext("Online (hidden)");
-      } else if (this.props.status.is_offline_hidden) {
-        return gettext("Offline (hidden)");
-      } else if (this.props.status.is_online) {
-        return gettext("Online");
-      } else if (this.props.status.is_offline) {
-        return gettext("Offline");
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'span',
-        { className: this.props.className || "status-label",
-          title: this.getHelp() },
-        this.getLabel()
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return StatusLabel;
-}(_react2.default.Component);
-
-},{"react":"react"}],80:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.NoActivePosters = exports.ActivePostersLoading = exports.ActivePosters = exports.ActivePoster = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactRouter = require('react-router');
-
-var _avatar = require('../avatar');
-
-var _avatar2 = _interopRequireDefault(_avatar);
-
-var _userStatus = require('../user-status');
-
-var _userStatus2 = _interopRequireDefault(_userStatus);
-
-var _index = require('../../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _users = require('../../reducers/users');
-
-var _pageTitle = require('../../services/page-title');
-
-var _pageTitle2 = _interopRequireDefault(_pageTitle);
-
-var _store = require('../../services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-// jshint ignore:line
-// jshint ignore:line
-
-var ActivePoster = exports.ActivePoster = function (_React$Component) {
-  _inherits(ActivePoster, _React$Component);
-
-  function ActivePoster() {
-    _classCallCheck(this, ActivePoster);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(ActivePoster).apply(this, arguments));
-  }
-
-  _createClass(ActivePoster, [{
-    key: 'getClassName',
-    value: function getClassName() {
-      if (this.props.rank.css_class) {
-        return "list-group-item list-group-rank-" + this.props.rank.css_class;
-      } else {
-        return "list-group-item";
-      }
-    }
-  }, {
-    key: 'getUserStatus',
-    value: function getUserStatus() {
-      if (this.props.user.status) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          _userStatus2.default,
-          { user: this.props.user, status: this.props.user.status },
-          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,
-            status: this.props.user.status }),
-          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,
-            status: this.props.user.status,
-            className: 'status-label hidden-xs hidden-sm' })
-        );
-        /* jshint ignore:end */
-      } else {
-          /* jshint ignore:start */
-          return _react2.default.createElement(
-            'span',
-            { className: 'user-status' },
-            _react2.default.createElement(
-              'span',
-              { className: 'status-icon ui-preview' },
-              ' '
-            ),
-            _react2.default.createElement(
-              'span',
-              { className: 'status-label ui-preview hidden-xs hidden-sm' },
-              ' '
-            )
-          );
-          /* jshint ignore:end */
-        }
-    }
-  }, {
-    key: 'getRankName',
-    value: function getRankName() {
-      if (this.props.rank.is_tab) {
-        /* jshint ignore:start */
-        var rankUrl = _index2.default.get('USERS_LIST_URL') + this.props.rank.slug + '/';
-        return _react2.default.createElement(
-          _reactRouter.Link,
-          { to: rankUrl, className: 'rank-name' },
-          this.props.rank.name
-        );
-        /* jshint ignore:end */
-      } else {
-          /* jshint ignore:start */
-          return _react2.default.createElement(
-            'span',
-            { className: 'rank-name' },
-            this.props.rank.name
-          );
-          /* jshint ignore:end */
-        }
-    }
-  }, {
-    key: 'getUserTitle',
-    value: function getUserTitle() {
-      if (this.props.user.title) {
-        /* jshint ignore:start */
-        return _react2.default.createElement(
-          'span',
-          { className: 'user-title hidden-xs hidden-sm' },
-          this.props.user.title
-        );
-        /* jshint ignore:end */
-      } else {
-          return null;
-        }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'li',
-        { className: this.getClassName() },
-        _react2.default.createElement(
-          'div',
-          { className: 'rank-user-avatar' },
-          _react2.default.createElement(
-            'a',
-            { href: this.props.user.absolute_url },
-            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '50' })
-          )
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'rank-user' },
-          _react2.default.createElement(
-            'div',
-            { className: 'user-name' },
-            _react2.default.createElement(
-              'a',
-              { href: this.props.user.absolute_url, className: 'item-title' },
-              this.props.user.username
-            )
-          ),
-          this.getUserStatus(),
-          this.getRankName(),
-          this.getUserTitle()
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'rank-position' },
-          _react2.default.createElement(
-            'div',
-            { className: 'stat-value' },
-            '#',
-            this.props.counter
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'text-muted' },
-            gettext("Rank")
-          )
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'rank-posts-counted' },
-          _react2.default.createElement(
-            'div',
-            { className: 'stat-value' },
-            this.props.user.meta.score
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'text-muted' },
-            gettext("Ranked posts")
-          )
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: 'rank-posts-total' },
-          _react2.default.createElement(
-            'div',
-            { className: 'stat-value' },
-            this.props.user.posts
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'text-muted' },
-            gettext("Total posts")
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ActivePoster;
-}(_react2.default.Component);
-
-var ActivePosters = exports.ActivePosters = function (_React$Component2) {
-  _inherits(ActivePosters, _React$Component2);
-
-  function ActivePosters() {
-    _classCallCheck(this, ActivePosters);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(ActivePosters).apply(this, arguments));
-  }
-
-  _createClass(ActivePosters, [{
-    key: 'getLeadMessage',
-    value: function getLeadMessage() {
-      var message = ngettext("%(posters)s most active poster from last %(days)s days.", "%(posters)s most active posters from last %(days)s days.", this.props.count);
-
-      return interpolate(message, {
-        posters: this.props.count,
-        days: this.props.trackedPeriod
-      }, true);
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'active-posters-list' },
-        _react2.default.createElement(
-          'div',
-          { className: 'container' },
-          _react2.default.createElement(
-            'p',
-            { className: 'lead' },
-            this.getLeadMessage()
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'active-posters ui-ready' },
-            _react2.default.createElement(
-              'ul',
-              { className: 'list-group' },
-              this.props.users.map(function (user, i) {
-                return _react2.default.createElement(ActivePoster, { user: user,
-                  rank: user.rank,
-                  counter: i + 1,
-                  key: user.id });
-              })
-            )
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ActivePosters;
-}(_react2.default.Component);
-
-var ActivePostersLoading = exports.ActivePostersLoading = function (_React$Component3) {
-  _inherits(ActivePostersLoading, _React$Component3);
-
-  function ActivePostersLoading() {
-    _classCallCheck(this, ActivePostersLoading);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(ActivePostersLoading).apply(this, arguments));
-  }
-
-  _createClass(ActivePostersLoading, [{
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'active-posters-list' },
-        _react2.default.createElement(
-          'div',
-          { className: 'container' },
-          'This is UI preview!'
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ActivePostersLoading;
-}(_react2.default.Component);
-
-var NoActivePosters = exports.NoActivePosters = function (_React$Component4) {
-  _inherits(NoActivePosters, _React$Component4);
-
-  function NoActivePosters() {
-    _classCallCheck(this, NoActivePosters);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoActivePosters).apply(this, arguments));
-  }
-
-  _createClass(NoActivePosters, [{
-    key: 'getEmptyMessage',
-    value: function getEmptyMessage() {
-      return interpolate(gettext("No users have posted any new messages during last %(days)s days."), { 'days': this.props.trackedPeriod }, true);
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'active-posters-list' },
-        _react2.default.createElement(
-          'div',
-          { className: 'container' },
-          _react2.default.createElement(
-            'p',
-            { className: 'lead' },
-            this.getEmptyMessage()
-          )
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return NoActivePosters;
-}(_react2.default.Component);
-
-var _class = function (_React$Component5) {
-  _inherits(_class, _React$Component5);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this5 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    if (_index2.default.has('USERS')) {
-      _this5.initWithPreloadedData(_index2.default.pop('USERS'));
-    } else {
-      _this5.initWithoutPreloadedData();
-    }
-    return _this5;
-  }
-
-  _createClass(_class, [{
-    key: 'initWithPreloadedData',
-    value: function initWithPreloadedData(data) {
-      this.state = {
-        isLoaded: true,
-
-        trackedPeriod: data.tracked_period,
-        count: data.count
-      };
-
-      _store2.default.dispatch((0, _users.dehydrate)(data.results));
-    }
-  }, {
-    key: 'initWithoutPreloadedData',
-    value: function initWithoutPreloadedData() {
-      this.state = {
-        isLoaded: false
-      };
-    }
-  }, {
-    key: 'componentDidMount',
-    value: function componentDidMount() {
-      _pageTitle2.default.set({
-        title: this.props.route.extra.name,
-        parent: gettext("Users")
-      });
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      if (this.state.isLoaded) {
-        if (this.state.count > 0) {
-          /* jshint ignore:start */
-          return _react2.default.createElement(ActivePosters, { users: this.props.users,
-            trackedPeriod: this.state.trackedPeriod,
-            count: this.state.count });
-          /* jshint ignore:end */
-        } else {
-            /* jshint ignore:start */
-            return _react2.default.createElement(NoActivePosters, { trackedPeriod: this.state.trackedPeriod });
-            /* jshint ignore:end */
-          }
-      } else {
-          /* jshint ignore:start */
-          return _react2.default.createElement(ActivePostersLoading, null);
-          /* jshint ignore:end */
-        }
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../../index":85,"../../reducers/users":90,"../../services/page-title":98,"../../services/store":100,"../avatar":49,"../user-status":79,"react":"react","react-router":"react-router"}],81:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.CompactNav = exports.TabsNav = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactRouter = require('react-router');
-
-var _li = require('../li');
-
-var _li2 = _interopRequireDefault(_li);
-
-var _index = require('../../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-//jshint ignore:line
-
-//jshint ignore:line
-
-// jshint ignore:start
-var listUrl = function listUrl(baseUrl, list) {
-  var url = baseUrl;
-  if (list.component === 'rank') {
-    url += list.slug;
-  } else {
-    url += list.component;
-  }
-  return url + '/';
-};
-
-var navLinks = function navLinks(baseUrl, lists) {
-  return lists.map(function (list) {
-    var url = listUrl(baseUrl, list);
-    return _react2.default.createElement(
-      _li2.default,
-      { path: url,
-        key: url },
-      _react2.default.createElement(
-        _reactRouter.Link,
-        { to: url },
-        list.name
-      )
-    );
-  });
-};
-// jshint ignore:end
-
-var TabsNav = exports.TabsNav = function (_React$Component) {
-  _inherits(TabsNav, _React$Component);
-
-  function TabsNav() {
-    _classCallCheck(this, TabsNav);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(TabsNav).apply(this, arguments));
-  }
-
-  _createClass(TabsNav, [{
-    key: 'render',
-    value: function render() {
-      // jshint ignore:start
-      return _react2.default.createElement(
-        'ul',
-        { className: 'nav nav-pills' },
-        navLinks(this.props.baseUrl, this.props.lists)
-      );
-      // jshint ignore:end
-    }
-  }]);
-
-  return TabsNav;
-}(_react2.default.Component);
-
-var CompactNav = exports.CompactNav = function (_React$Component2) {
-  _inherits(CompactNav, _React$Component2);
-
-  function CompactNav() {
-    _classCallCheck(this, CompactNav);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));
-  }
-
-  _createClass(CompactNav, [{
-    key: 'render',
-    value: function render() {
-      // jshint ignore:start
-      return _react2.default.createElement(
-        'ul',
-        { className: 'dropdown-menu', role: 'menu' },
-        navLinks(this.props.baseUrl, this.props.lists)
-      );
-      // jshint ignore:end
-    }
-  }]);
-
-  return CompactNav;
-}(_react2.default.Component);
-
-},{"../../index":85,"../li":59,"react":"react","react-router":"react-router"}],82:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _pageTitle = require('../../services/page-title');
-
-var _pageTitle2 = _interopRequireDefault(_pageTitle);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    _classCallCheck(this, _class);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
-  }
-
-  _createClass(_class, [{
-    key: 'componentDidMount',
-    value: function componentDidMount() {
-      _pageTitle2.default.set({
-        title: this.props.route.rank.name,
-        parent: gettext("Users")
-      });
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        null,
-        _react2.default.createElement(
-          'div',
-          { className: 'container' },
-          'Hello, this is users with rank list!'
-        )
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"../../services/page-title":98,"react":"react"}],83:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.select = select;
-exports.paths = paths;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactRedux = require('react-redux');
-
-var _navs = require('./navs');
-
-var _activePosters = require('./active-posters');
-
-var _activePosters2 = _interopRequireDefault(_activePosters);
-
-var _rank = require('./rank');
-
-var _rank2 = _interopRequireDefault(_rank);
-
-var _index = require('../../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class(props) {
-    _classCallCheck(this, _class);
-
-    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
-
-    _this.toggleNav = function () {
-      if (_this.state.dropdown) {
-        _this.setState({
-          dropdown: false
-        });
-      } else {
-        _this.setState({
-          dropdown: true
-        });
-      }
-    };
-
-    _this.state = {
-      dropdown: false
-    };
-    return _this;
-  }
-
-  /* jshint ignore:start */
-
-  _createClass(_class, [{
-    key: 'getToggleNavClassName',
-
-    /* jshint ignore:end */
-
-    value: function getToggleNavClassName() {
-      if (this.state.dropdown) {
-        return 'btn btn-default btn-icon open';
-      } else {
-        return 'btn btn-default btn-icon';
-      }
-    }
-  }, {
-    key: 'getCompactNavClassName',
-    value: function getCompactNavClassName() {
-      if (this.state.dropdown) {
-        return 'compact-nav open';
-      } else {
-        return 'compact-nav';
-      }
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        'div',
-        { className: 'page page-users-lists' },
-        _react2.default.createElement(
-          'div',
-          { className: 'page-header tabbed' },
-          _react2.default.createElement(
-            'div',
-            { className: 'container' },
-            _react2.default.createElement(
-              'h1',
-              null,
-              gettext("Users")
-            ),
-            _react2.default.createElement(
-              'button',
-              { className: 'btn btn-default btn-icon btn-dropdown-toggle hidden-md hidden-lg',
-                type: 'button',
-                onClick: this.toggleNav,
-                'aria-haspopup': 'true',
-                'aria-expanded': this.state.dropdown ? 'true' : 'false' },
-              _react2.default.createElement(
-                'i',
-                { className: 'material-icon' },
-                'menu'
-              )
-            )
-          ),
-          _react2.default.createElement(
-            'div',
-            { className: 'page-tabs hidden-xs hidden-sm' },
-            _react2.default.createElement(
-              'div',
-              { className: 'container' },
-              _react2.default.createElement(_navs.TabsNav, { lists: _index2.default.get('USERS_LISTS'),
-                baseUrl: _index2.default.get('USERS_LIST_URL') })
-            )
-          )
-        ),
-        _react2.default.createElement(
-          'div',
-          { className: this.getCompactNavClassName() },
-          _react2.default.createElement(_navs.CompactNav, { lists: _index2.default.get('USERS_LISTS'),
-            baseUrl: _index2.default.get('USERS_LIST_URL') })
-        ),
-        this.props.children
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-function select(store) {
-  return {
-    'tick': store.tick.tick,
-    'user': store.auth.user,
-    'users': store.users
-  };
-}
-
-function paths() {
-  var paths = [];
-
-  _index2.default.get('USERS_LISTS').forEach(function (item) {
-    if (item.component === 'rank') {
-      paths.push({
-        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/',
-        component: (0, _reactRedux.connect)(select)(_rank2.default),
-        rank: {
-          name: item.name,
-          slug: item.slug,
-          css_class: item.css_class,
-          description: item.description
-        }
-      });
-    } else if (item.component === 'active-posters') {
-      paths.push({
-        path: _index2.default.get('USERS_LIST_URL') + item.component + '/',
-        component: (0, _reactRedux.connect)(select)(_activePosters2.default),
-        extra: {
-          name: item.name
-        }
-      });
-    }
-  });
-
-  return paths;
-}
-
-},{"../../index":85,"./active-posters":80,"./navs":81,"./rank":82,"react":"react","react-redux":"react-redux"}],84:[function(require,module,exports){
-"use strict";
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-var _react = require("react");
-
-var _react2 = _interopRequireDefault(_react);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var _class = function (_React$Component) {
-  _inherits(_class, _React$Component);
-
-  function _class() {
-    var _Object$getPrototypeO;
-
-    var _temp, _this, _ret;
-
-    _classCallCheck(this, _class);
-
-    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.toggle = function () {
-      _this.props.onChange({
-        target: {
-          value: !_this.props.value
-        }
-      });
-    }, _temp), _possibleConstructorReturn(_this, _ret);
-  }
-
-  _createClass(_class, [{
-    key: "getClassName",
-    value: function getClassName() {
-      if (this.props.value) {
-        return "btn btn-yes-no btn-yes-no-on";
-      } else {
-        return "btn btn-yes-no btn-yes-no-off";
-      }
-    }
-  }, {
-    key: "getIcon",
-    value: function getIcon() {
-      if (this.props.value) {
-        return this.props.iconOn || 'check_box';
-      } else {
-        return this.props.iconOff || 'check_box_outline_blank';
-      }
-    }
-  }, {
-    key: "getLabel",
-    value: function getLabel() {
-      if (this.props.value) {
-        return this.props.labelOn || gettext("yes");
-      } else {
-        return this.props.labelOff || gettext("no");
-      }
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: "render",
-
-    /* jshint ignore:end */
-
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement(
-        "button",
-        { type: "button",
-          onClick: this.toggle,
-          className: this.getClassName(),
-          id: this.props.id || null,
-          "aria-describedby": this.props['aria-describedby'] || null,
-          disabled: this.props.disabled || false },
-        _react2.default.createElement(
-          "span",
-          { className: "material-icon" },
-          this.getIcon()
-        ),
-        this.getLabel()
-      );
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return _class;
-}(_react2.default.Component);
-
-exports.default = _class;
-
-},{"react":"react"}],85:[function(require,module,exports){
-(function (global){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.Misago = undefined;
-
-var _orderedList = require('./utils/ordered-list');
-
-var _orderedList2 = _interopRequireDefault(_orderedList);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var Misago = exports.Misago = function () {
-  function Misago() {
-    _classCallCheck(this, Misago);
-
-    this._initializers = [];
-    this._context = {};
-  }
-
-  _createClass(Misago, [{
-    key: 'addInitializer',
-    value: function addInitializer(initializer) {
-      this._initializers.push({
-        key: initializer.name,
-
-        item: initializer.initializer,
-
-        after: initializer.after,
-        before: initializer.before
-      });
-    }
-  }, {
-    key: 'init',
-    value: function init(context) {
-      var _this = this;
-
-      this._context = context;
-
-      var initOrder = new _orderedList2.default(this._initializers).orderedValues();
-      initOrder.forEach(function (initializer) {
-        initializer(_this);
-      });
-    }
-
-    // context accessors
-
-  }, {
-    key: 'has',
-    value: function has(key) {
-      return !!this._context[key];
-    }
-  }, {
-    key: 'get',
-    value: function get(key, fallback) {
-      if (this.has(key)) {
-        return this._context[key];
-      } else {
-        return fallback || undefined;
-      }
-    }
-  }, {
-    key: 'pop',
-    value: function pop(key) {
-      if (this.has(key)) {
-        var value = this._context[key];
-        this._context[key] = null;
-        return value;
-      } else {
-        return undefined;
-      }
-    }
-  }]);
-
-  return Misago;
-}();
-
-// create  singleton
-
-var misago = new Misago();
-
-// expose it globally
-global.misago = misago;
-
-// and export it for tests and stuff
-exports.default = misago;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-
-},{"./utils/ordered-list":106}],86:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.SIGN_OUT = exports.SIGN_IN = exports.PATCH_USER = exports.initialState = undefined;
-exports.patchUser = patchUser;
-exports.signIn = signIn;
-exports.signOut = signOut;
-exports.default = auth;
-
-var _users = require('./users');
-
-var initialState = exports.initialState = {
-  signedIn: false,
-  signedOut: false
-};
-
-var PATCH_USER = exports.PATCH_USER = 'PATCH_USER';
-var SIGN_IN = exports.SIGN_IN = 'SIGN_IN';
-var SIGN_OUT = exports.SIGN_OUT = 'SIGN_OUT';
-
-function patchUser(patch) {
-  return {
-    type: PATCH_USER,
-    patch: patch
-  };
-}
-
-function signIn(user) {
-  return {
-    type: SIGN_IN,
-    user: user
-  };
-}
-
-function signOut() {
-  var soft = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];
-
-  return {
-    type: SIGN_OUT,
-    soft: soft
-  };
-}
-
-function auth() {
-  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
-  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
-
-  switch (action.type) {
-    case PATCH_USER:
-      var newState = Object.assign({}, state);
-      newState.user = Object.assign({}, state.user, action.patch);
-      return newState;
-
-    case SIGN_IN:
-      return Object.assign({}, state, {
-        signedIn: action.user
-      });
-
-    case SIGN_OUT:
-      return Object.assign({}, state, {
-        isAuthenticated: false,
-        isAnonymous: true,
-        signedOut: !action.soft
-      });
-
-    case _users.UPDATE_AVATAR:
-      if (state.isAuthenticated && state.user.id === action.userId) {
-        var _newState = Object.assign({}, state);
-        _newState.user = Object.assign({}, state.user, {
-          'avatar_hash': action.avatarHash
-        });
-        return _newState;
-      }
-      return state;
-
-    case _users.UPDATE_USERNAME:
-      if (state.isAuthenticated && state.user.id === action.userId) {
-        var _newState2 = Object.assign({}, state);
-        _newState2.user = Object.assign({}, state.user, {
-          username: action.username,
-          slug: action.slug
-        });
-        return _newState2;
-      }
-      return state;
-
-    default:
-      return state;
-  }
-}
-
-},{"./users":90}],87:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.showSnackbar = showSnackbar;
-exports.hideSnackbar = hideSnackbar;
-exports.default = snackbar;
-var initialState = exports.initialState = {
-  type: 'info',
-  message: '',
-  isVisible: false
-};
-
-var SHOW_SNACKBAR = exports.SHOW_SNACKBAR = 'SHOW_SNACKBAR';
-var HIDE_SNACKBAR = exports.HIDE_SNACKBAR = 'HIDE_SNACKBAR';
-
-function showSnackbar(message, type) {
-  return {
-    type: SHOW_SNACKBAR,
-    message: message,
-    messageType: type
-  };
-}
-
-function hideSnackbar() {
-  return {
-    type: HIDE_SNACKBAR
-  };
-}
-
-function snackbar() {
-  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
-  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
-
-  if (action.type === SHOW_SNACKBAR) {
-    return {
-      type: action.messageType,
-      message: action.message,
-      isVisible: true
-    };
-  } else if (action.type === HIDE_SNACKBAR) {
-    return Object.assign({}, state, {
-      isVisible: false
-    });
-  } else {
-    return state;
-  }
-}
-
-},{}],88:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.doTick = doTick;
-exports.default = tick;
-var initialState = exports.initialState = {
-  tick: 0
-};
-
-var TICK = exports.TICK = 'TICK';
-
-function doTick() {
-  return {
-    type: TICK
-  };
-}
-
-function tick() {
-  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
-  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
-
-  if (action.type === TICK) {
-    return Object.assign({}, state, {
-      tick: state.tick + 1
-    });
-  } else {
-    return state;
-  }
-}
-
-},{}],89:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.DEHYDRATE_RESULT = exports.ADD_NAME_CHANGE = undefined;
-exports.addNameChange = addNameChange;
-exports.dehydrate = dehydrate;
-exports.default = username;
-
-var _users = require('./users');
-
-var _moment = require('moment');
-
-var _moment2 = _interopRequireDefault(_moment);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var ADD_NAME_CHANGE = exports.ADD_NAME_CHANGE = 'ADD_NAME_CHANGE';
-var DEHYDRATE_RESULT = exports.DEHYDRATE_RESULT = 'DEHYDRATE_RESULT';
-
-function addNameChange(change, user, changedBy) {
-  return {
-    type: ADD_NAME_CHANGE,
-    change: change,
-    user: user,
-    changedBy: changedBy
-  };
-}
-
-function dehydrate(items) {
-  return {
-    type: DEHYDRATE_RESULT,
-    items: items
-  };
-}
-
-function username() {
-  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
-  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
-
-  switch (action.type) {
-    case ADD_NAME_CHANGE:
-      var newState = state.slice();
-      newState.unshift({
-        id: Math.floor(Date.now() / 1000), // just small hax for getting id
-        changed_by: action.changedBy,
-        changed_by_username: action.changedBy.username,
-        changed_on: (0, _moment2.default)(),
-        new_username: action.change.username,
-        old_username: action.user.username
-      });
-      return newState;
-
-    case DEHYDRATE_RESULT:
-      return action.items.map(function (item) {
-        return Object.assign({}, item, {
-          changed_on: (0, _moment2.default)(item.changed_on)
-        });
-      });
-
-    case _users.UPDATE_AVATAR:
-      return state.map(function (item) {
-        item = Object.assign({}, item);
-        if (item.changed_by && item.changed_by.id === action.userId) {
-          item.changed_by = Object.assign({}, item.changed_by, {
-            'avatar_hash': action.avatarHash
-          });
-        }
-
-        return Object.assign({}, item);
-      });
-
-    case _users.UPDATE_USERNAME:
-      return state.map(function (item) {
-        item = Object.assign({}, item);
-        if (item.changed_by && item.changed_by.id === action.userId) {
-          item.changed_by = Object.assign({}, item.changed_by, {
-            'username': action.username,
-            'slug': action.slug
-          });
-        }
-
-        return Object.assign({}, item);
-      });
-
-    default:
-      return state;
-  }
-}
-
-},{"./users":90,"moment":"moment"}],90:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.dehydrate = dehydrate;
-exports.updateAvatar = updateAvatar;
-exports.updateUsername = updateUsername;
-exports.default = user;
-var DEHYDRATE_RESULT = exports.DEHYDRATE_RESULT = 'DEHYDRATE_RESULT';
-var UPDATE_AVATAR = exports.UPDATE_AVATAR = 'UPDATE_AVATAR';
-var UPDATE_USERNAME = exports.UPDATE_USERNAME = 'UPDATE_USERNAME';
-
-function dehydrate(items) {
-  return {
-    type: DEHYDRATE_RESULT,
-    items: items
-  };
-}
-
-function updateAvatar(user, avatarHash) {
-  return {
-    type: UPDATE_AVATAR,
-    userId: user.id,
-    avatarHash: avatarHash
-  };
-}
-
-function updateUsername(user, username, slug) {
-  return {
-    type: UPDATE_USERNAME,
-    userId: user.id,
-    username: username,
-    slug: slug
-  };
-}
-
-function user() {
-  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
-  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
-
-  switch (action.type) {
-    case DEHYDRATE_RESULT:
-      return action.items.map(function (item) {
-        return Object.assign({}, item, {});
-      });
-
-    default:
-      return state;
-  }
-}
-
-},{}],91:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var Ajax = exports.Ajax = function () {
-  function Ajax() {
-    _classCallCheck(this, Ajax);
-
-    this._cookieName = null;
-    this._csrfToken = null;
-  }
-
-  _createClass(Ajax, [{
-    key: 'init',
-    value: function init(cookieName) {
-      this._cookieName = cookieName;
-      this._csrfToken = this.getCsrfToken();
-    }
-  }, {
-    key: 'getCsrfToken',
-    value: function getCsrfToken() {
-      if (document.cookie.indexOf(this._cookieName) !== -1) {
-        var cookieRegex = new RegExp(this._cookieName + '\=([^;]*)');
-        var cookie = document.cookie.match(cookieRegex)[0];
-        return cookie ? cookie.split('=')[1] : null;
-      } else {
-        return null;
-      }
-    }
-  }, {
-    key: 'request',
-    value: function request(method, url, data) {
-      var self = this;
-      return new Promise(function (resolve, reject) {
-        var xhr = {
-          url: url,
-          method: method,
-          headers: {
-            'X-CSRFToken': self._csrfToken
-          },
-
-          data: data ? JSON.stringify(data) : null,
-          contentType: "application/json; charset=utf-8",
-          dataType: 'json',
-
-          success: function success(data) {
-            resolve(data);
-          },
-
-          error: function error(jqXHR) {
-            var rejection = jqXHR.responseJSON || {};
-
-            rejection.status = jqXHR.status;
-
-            if (rejection.status === 0) {
-              rejection.detail = gettext("Lost connection with application.");
-            }
-
-            rejection.statusText = jqXHR.statusText;
-
-            reject(rejection);
-          }
-        };
-
-        $.ajax(xhr);
-      });
-    }
-  }, {
-    key: 'get',
-    value: function get(url, params) {
-      if (params) {
-        url += '?' + $.param(params);
-      }
-      return this.request('GET', url);
-    }
-  }, {
-    key: 'post',
-    value: function post(url, data) {
-      return this.request('POST', url, data);
-    }
-  }, {
-    key: 'patch',
-    value: function patch(url, data) {
-      return this.request('PATCH', url, data);
-    }
-  }, {
-    key: 'put',
-    value: function put(url, data) {
-      return this.request('PUT', url, data);
-    }
-  }, {
-    key: 'delete',
-    value: function _delete(url) {
-      return this.request('DELETE', url);
-    }
-  }, {
-    key: 'upload',
-    value: function upload(url, data, progress) {
-      var self = this;
-      return new Promise(function (resolve, reject) {
-        var xhr = {
-          url: url,
-          method: 'POST',
-          headers: {
-            'X-CSRFToken': self._csrfToken
-          },
-
-          data: data,
-          contentType: false,
-          processData: false,
-
-          xhr: function xhr() {
-            var xhr = new window.XMLHttpRequest();
-            xhr.upload.addEventListener("progress", function (evt) {
-              if (evt.lengthComputable) {
-                progress(Math.round(evt.loaded / evt.total * 100));
-              }
-            }, false);
-            return xhr;
-          },
-
-          success: function success(response) {
-            resolve(response);
-          },
-
-          error: function error(jqXHR) {
-            var rejection = jqXHR.responseJSON || {};
-
-            rejection.status = jqXHR.status;
-
-            if (rejection.status === 0) {
-              rejection.detail = gettext("Lost connection with application.");
-            }
-
-            rejection.statusText = jqXHR.statusText;
-
-            reject(rejection);
-          }
-        };
-
-        $.ajax(xhr);
-      });
-    }
-  }]);
-
-  return Ajax;
-}();
-
-exports.default = new Ajax();
-
-},{}],92:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.Auth = undefined;
-
-var _auth = require('../reducers/auth');
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-// jshint ignore:line
-
-var Auth = exports.Auth = function () {
-  function Auth() {
-    _classCallCheck(this, Auth);
-  }
-
-  _createClass(Auth, [{
-    key: 'init',
-    value: function init(store, local, modal) {
-      this._store = store;
-      this._local = local;
-      this._modal = modal;
-
-      // tell other tabs what auth state is because we are most current with it
-      this.syncSession();
-
-      // listen for other tabs to tell us that state changed
-      this.watchState();
-    }
-  }, {
-    key: 'syncSession',
-    value: function syncSession() {
-      var state = this._store.getState().auth;
-      if (state.isAuthenticated) {
-        this._local.set('auth', {
-          isAuthenticated: true,
-          username: state.user.username
-        });
-      } else {
-        this._local.set('auth', {
-          isAuthenticated: false
-        });
-      }
-    }
-  }, {
-    key: 'watchState',
-    value: function watchState() {
-      var _this = this;
-
-      this._local.watch('auth', function (newState) {
-        if (newState.isAuthenticated) {
-          _this._store.dispatch((0, _auth.signIn)({
-            username: newState.username
-          }));
-        } else {
-          _this._store.dispatch((0, _auth.signOut)());
-        }
-      });
-      this._modal.hide();
-    }
-  }, {
-    key: 'signIn',
-    value: function signIn(user) {
-      this._store.dispatch((0, _auth.signIn)(user));
-      this._local.set('auth', {
-        isAuthenticated: true,
-        username: user.username
-      });
-      this._modal.hide();
-    }
-  }, {
-    key: 'signOut',
-    value: function signOut() {
-      this._store.dispatch((0, _auth.signOut)());
-      this._local.set('auth', {
-        isAuthenticated: false
-      });
-      this._modal.hide();
-    }
-  }, {
-    key: 'softSignOut',
-    value: function softSignOut() {
-      this._store.dispatch((0, _auth.signOut)(true));
-      this._local.set('auth', {
-        isAuthenticated: false
-      });
-      this._modal.hide();
-    }
-  }]);
-
-  return Auth;
-}();
-
-exports.default = new Auth();
-
-},{"../reducers/auth":86}],93:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global grecaptcha */
-// jshint ignore:line
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.Captcha = exports.ReCaptcha = exports.ReCaptchaComponent = exports.QACaptcha = exports.NoCaptcha = exports.BaseCaptcha = undefined;
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _formGroup = require('../components/form-group');
-
-var _formGroup2 = _interopRequireDefault(_formGroup);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-// jshint ignore:line
-
-var BaseCaptcha = exports.BaseCaptcha = function () {
-  function BaseCaptcha() {
-    _classCallCheck(this, BaseCaptcha);
-  }
-
-  _createClass(BaseCaptcha, [{
-    key: 'init',
-    value: function init(context, ajax, include, snackbar) {
-      this._context = context;
-      this._ajax = ajax;
-      this._include = include;
-      this._snackbar = snackbar;
-    }
-  }]);
-
-  return BaseCaptcha;
-}();
-
-var NoCaptcha = exports.NoCaptcha = function (_BaseCaptcha) {
-  _inherits(NoCaptcha, _BaseCaptcha);
-
-  function NoCaptcha() {
-    _classCallCheck(this, NoCaptcha);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoCaptcha).apply(this, arguments));
-  }
-
-  _createClass(NoCaptcha, [{
-    key: 'load',
-    value: function load() {
-      return new Promise(function (resolve) {
-        // immediately resolve as we don't have anything to validate
-        resolve();
-      });
-    }
-  }, {
-    key: 'validator',
-    value: function validator() {
-      return null;
-    }
-  }, {
-    key: 'component',
-    value: function component() {
-      return null;
-    }
-  }]);
-
-  return NoCaptcha;
-}(BaseCaptcha);
-
-var QACaptcha = exports.QACaptcha = function (_BaseCaptcha2) {
-  _inherits(QACaptcha, _BaseCaptcha2);
-
-  function QACaptcha() {
-    _classCallCheck(this, QACaptcha);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(QACaptcha).apply(this, arguments));
-  }
-
-  _createClass(QACaptcha, [{
-    key: 'load',
-    value: function load() {
-      var self = this;
-      return new Promise(function (resolve, reject) {
-        self._ajax.get(self._context.get('CAPTCHA_API_URL')).then(function (data) {
-          self.question = data.question;
-          self.helpText = data.help_text;
-          resolve();
-        }, function () {
-          self._snackbar.error(gettext("Failed to load CAPTCHA."));
-          reject();
-        });
-      });
-    }
-  }, {
-    key: 'validator',
-    value: function validator() {
-      return [];
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: 'component',
-    value: function component(kwargs) {
-      return _react2.default.createElement(
-        _formGroup2.default,
-        { label: this.question, 'for': 'id_captcha',
-          labelClass: kwargs.labelClass || "col-sm-4",
-          controlClass: kwargs.controlClass || "col-sm-8",
-          validation: kwargs.form.state.errors.captcha,
-          helpText: this.helpText || null },
-        _react2.default.createElement('input', { type: 'text', id: 'id_captcha', className: 'form-control',
-          'aria-describedby': 'id_captcha_status',
-          disabled: kwargs.form.state.isLoading,
-          onChange: kwargs.form.bindInput('captcha'),
-          value: kwargs.form.state.captcha })
-      );
-    }
-    /* jshint ignore:end */
-
-  }]);
-
-  return QACaptcha;
-}(BaseCaptcha);
-
-var ReCaptchaComponent = exports.ReCaptchaComponent = function (_React$Component) {
-  _inherits(ReCaptchaComponent, _React$Component);
-
-  function ReCaptchaComponent() {
-    _classCallCheck(this, ReCaptchaComponent);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptchaComponent).apply(this, arguments));
-  }
-
-  _createClass(ReCaptchaComponent, [{
-    key: 'componentDidMount',
-    value: function componentDidMount() {
-      var _this4 = this;
-
-      grecaptcha.render('recaptcha', {
-        'sitekey': this.props.siteKey,
-        'callback': function callback(response) {
-          // fire fakey event to binding
-          _this4.props.binding({
-            target: {
-              value: response
-            }
-          });
-        }
-      });
-    }
-  }, {
-    key: 'render',
-    value: function render() {
-      /* jshint ignore:start */
-      return _react2.default.createElement('div', { id: 'recaptcha' });
-      /* jshint ignore:end */
-    }
-  }]);
-
-  return ReCaptchaComponent;
-}(_react2.default.Component);
-
-var ReCaptcha = exports.ReCaptcha = function (_BaseCaptcha3) {
-  _inherits(ReCaptcha, _BaseCaptcha3);
-
-  function ReCaptcha() {
-    _classCallCheck(this, ReCaptcha);
-
-    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptcha).apply(this, arguments));
-  }
-
-  _createClass(ReCaptcha, [{
-    key: 'load',
-    value: function load() {
-      this._include.include('https://www.google.com/recaptcha/api.js', true);
-
-      return new Promise(function (resolve) {
-        var wait = function wait() {
-          if (typeof grecaptcha === "undefined") {
-            window.setTimeout(function () {
-              wait();
-            }, 200);
-          } else {
-            resolve();
-          }
-        };
-        wait();
-      });
-    }
-  }, {
-    key: 'validator',
-    value: function validator() {
-      return [];
-    }
-
-    /* jshint ignore:start */
-
-  }, {
-    key: 'component',
-    value: function component(kwargs) {
-      return _react2.default.createElement(
-        _formGroup2.default,
-        { label: gettext("Captcha"), 'for': 'id_captcha',
-          labelClass: kwargs.labelClass || "col-sm-4",
-          controlClass: kwargs.controlClass || "col-sm-8",
-          validation: kwargs.form.state.errors.captcha,
-          helpText: gettext("Please solve the quick test.") },
-        _react2.default.createElement(ReCaptchaComponent, { siteKey: this._context.get('SETTINGS').recaptcha_site_key,
-          binding: kwargs.form.bindInput('captcha') })
-      );
-    }
-    /* jshint ignore:end */
-
-  }]);
-
-  return ReCaptcha;
-}(BaseCaptcha);
-
-var Captcha = exports.Captcha = function () {
-  function Captcha() {
-    _classCallCheck(this, Captcha);
-  }
-
-  _createClass(Captcha, [{
-    key: 'init',
-    value: function init(context, ajax, include, snackbar) {
-      switch (context.get('SETTINGS').captcha_type) {
-        case 'no':
-          this._captcha = new NoCaptcha();
-          break;
-
-        case 'qa':
-          this._captcha = new QACaptcha();
-          break;
-
-        case 're':
-          this._captcha = new ReCaptcha();
-          break;
-      }
-
-      this._captcha.init(context, ajax, include, snackbar);
-    }
-
-    // accessors for underlying strategy
-
-  }, {
-    key: 'load',
-    value: function load() {
-      return this._captcha.load();
-    }
-  }, {
-    key: 'validator',
-    value: function validator() {
-      return this._captcha.validator();
-    }
-  }, {
-    key: 'component',
-    value: function component(kwargs) {
-      return this._captcha.component(kwargs);
-    }
-  }]);
-
-  return Captcha;
-}();
-
-exports.default = new Captcha();
-
-},{"../components/form-group":57,"react":"react"}],94:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var Include = exports.Include = function () {
-  function Include() {
-    _classCallCheck(this, Include);
-  }
-
-  _createClass(Include, [{
-    key: 'init',
-    value: function init(staticUrl) {
-      this._staticUrl = staticUrl;
-      this._included = [];
-    }
-  }, {
-    key: 'include',
-    value: function include(script) {
-      var remote = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
-
-      if (this._included.indexOf(script) === -1) {
-        this._included.push(script);
-        this._include(script, remote);
-      }
-    }
-  }, {
-    key: '_include',
-    value: function _include(script, remote) {
-      $.ajax({
-        url: (!remote ? this._staticUrl : '') + script,
-        cache: true,
-        dataType: 'script'
-      });
-    }
-  }]);
-
-  return Include;
-}();
-
-exports.default = new Include();
-
-},{}],95:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var storage = window.localStorage;
-
-var LocalStorage = exports.LocalStorage = function () {
-  function LocalStorage() {
-    _classCallCheck(this, LocalStorage);
-  }
-
-  _createClass(LocalStorage, [{
-    key: 'init',
-    value: function init(prefix) {
-      var _this = this;
-
-      this._prefix = prefix;
-      this._watchers = [];
-
-      window.addEventListener('storage', function (e) {
-        var newValueJson = JSON.parse(e.newValue);
-        _this._watchers.forEach(function (watcher) {
-          if (watcher.key === e.key && e.oldValue !== e.newValue) {
-            watcher.callback(newValueJson);
-          }
-        });
-      });
-    }
-  }, {
-    key: 'set',
-    value: function set(key, value) {
-      storage.setItem(this._prefix + key, JSON.stringify(value));
-    }
-  }, {
-    key: 'get',
-    value: function get(key) {
-      var itemString = storage.getItem(this._prefix + key);
-      if (itemString) {
-        return JSON.parse(itemString);
-      } else {
-        return null;
-      }
-    }
-  }, {
-    key: 'watch',
-    value: function watch(key, callback) {
-      this._watchers.push({
-        key: this._prefix + key,
-        callback: callback
-      });
-    }
-  }]);
-
-  return LocalStorage;
-}();
-
-exports.default = new LocalStorage();
-
-},{}],96:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.MobileNavbarDropdown = undefined;
-
-var _mountComponent = require('../utils/mount-component');
-
-var _mountComponent2 = _interopRequireDefault(_mountComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var MobileNavbarDropdown = exports.MobileNavbarDropdown = function () {
-  function MobileNavbarDropdown() {
-    _classCallCheck(this, MobileNavbarDropdown);
-  }
-
-  _createClass(MobileNavbarDropdown, [{
-    key: 'init',
-    value: function init(element) {
-      this._element = element;
-      this._component = null;
-    }
-  }, {
-    key: 'show',
-    value: function show(component) {
-      if (this._component === component) {
-        this.hide();
-      } else {
-        this._component = component;
-        (0, _mountComponent2.default)(component, this._element.id);
-        $(this._element).addClass('open');
-      }
-    }
-  }, {
-    key: 'showConnected',
-    value: function showConnected(name, component) {
-      if (this._component === name) {
-        this.hide();
-      } else {
-        this._component = name;
-        (0, _mountComponent2.default)(component, this._element.id, true);
-        $(this._element).addClass('open');
-      }
-    }
-  }, {
-    key: 'hide',
-    value: function hide() {
-      $(this._element).removeClass('open');
-      this._component = null;
-    }
-  }]);
-
-  return MobileNavbarDropdown;
-}();
-
-exports.default = new MobileNavbarDropdown();
-
-},{"../utils/mount-component":105}],97:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.Modal = undefined;
-
-var _reactDom = require('react-dom');
-
-var _reactDom2 = _interopRequireDefault(_reactDom);
-
-var _mountComponent = require('../utils/mount-component');
-
-var _mountComponent2 = _interopRequireDefault(_mountComponent);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var Modal = exports.Modal = function () {
-  function Modal() {
-    _classCallCheck(this, Modal);
-  }
-
-  _createClass(Modal, [{
-    key: 'init',
-    value: function init(element) {
-      var _this = this;
-
-      this._element = element;
-
-      this._modal = $(element).modal({ show: false });
-
-      this._modal.on('hidden.bs.modal', function () {
-        _reactDom2.default.unmountComponentAtNode(_this._element);
-      });
-    }
-  }, {
-    key: 'show',
-    value: function show(component) {
-      (0, _mountComponent2.default)(component, this._element.id);
-      this._modal.modal('show');
-    }
-  }, {
-    key: 'hide',
-    value: function hide() {
-      this._modal.modal('hide');
-    }
-  }]);
-
-  return Modal;
-}();
-
-exports.default = new Modal();
-
-},{"../utils/mount-component":105,"react-dom":"react-dom"}],98:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var PageTitle = exports.PageTitle = function () {
-  function PageTitle() {
-    _classCallCheck(this, PageTitle);
-  }
-
-  _createClass(PageTitle, [{
-    key: 'init',
-    value: function init(forumName) {
-      this._forumName = forumName;
-    }
-  }, {
-    key: 'set',
-    value: function set(title) {
-      if (typeof title === 'string') {
-        title = { title: title };
-      }
-
-      var finalTitle = title.title;
-
-      if (title.page) {
-        var pageLabel = interpolate(gettext('page %(page)s'), {
-          page: title.page
-        }, true);
-
-        finalTitle += ' (' + pageLabel + ')';
-      }
-
-      if (title.parent) {
-        finalTitle += ' | ' + title.parent;
-      }
-
-      document.title = finalTitle + ' | ' + this._forumName;
-    }
-  }]);
-
-  return PageTitle;
-}();
-
-exports.default = new PageTitle();
-
-},{}],99:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.Snackbar = undefined;
-
-var _snackbar = require('../reducers/snackbar');
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var HIDE_ANIMATION_LENGTH = 300;
-var MESSAGE_SHOW_LENGTH = 5000;
-
-var Snackbar = exports.Snackbar = function () {
-  function Snackbar() {
-    _classCallCheck(this, Snackbar);
-  }
-
-  _createClass(Snackbar, [{
-    key: 'init',
-    value: function init(store) {
-      this._store = store;
-      this._timeout = null;
-    }
-  }, {
-    key: 'alert',
-    value: function alert(message, type) {
-      var _this = this;
-
-      if (this._timeout) {
-        window.clearTimeout(this._timeout);
-        this._store.dispatch((0, _snackbar.hideSnackbar)());
-
-        this._timeout = window.setTimeout(function () {
-          _this._timeout = null;
-          _this.alert(message, type);
-        }, HIDE_ANIMATION_LENGTH);
-      } else {
-        this._store.dispatch((0, _snackbar.showSnackbar)(message, type));
-        this._timeout = window.setTimeout(function () {
-          _this._store.dispatch((0, _snackbar.hideSnackbar)());
-          _this._timeout = null;
-        }, MESSAGE_SHOW_LENGTH);
-      }
-    }
-
-    // shorthands for message types
-
-  }, {
-    key: 'info',
-    value: function info(message) {
-      this.alert(message, 'info');
-    }
-  }, {
-    key: 'success',
-    value: function success(message) {
-      this.alert(message, 'success');
-    }
-  }, {
-    key: 'warning',
-    value: function warning(message) {
-      this.alert(message, 'warning');
-    }
-  }, {
-    key: 'error',
-    value: function error(message) {
-      this.alert(message, 'error');
-    }
-
-    // shorthand for api errors
-
-  }, {
-    key: 'apiError',
-    value: function apiError(rejection) {
-      var message = gettext("Unknown error has occured.");
-
-      if (rejection.status === 0) {
-        message = rejection.detail;
-      }
-
-      if (rejection.status === 400 && rejection.detail) {
-        message = rejection.detail;
-      }
-
-      if (rejection.status === 403) {
-        message = rejection.detail;
-        if (message === "Permission denied") {
-          message = gettext("You don't have permission to perform this action.");
-        }
-      }
-
-      if (rejection.status === 404) {
-        message = gettext("Action link is invalid.");
-      }
-
-      this.error(message);
-    }
-  }]);
-
-  return Snackbar;
-}();
-
-exports.default = new Snackbar();
-
-},{"../reducers/snackbar":87}],100:[function(require,module,exports){
-'use strict';
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.StoreWrapper = undefined;
-
-var _redux = require('redux');
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var StoreWrapper = exports.StoreWrapper = function () {
-  function StoreWrapper() {
-    _classCallCheck(this, StoreWrapper);
-
-    this._store = null;
-    this._reducers = {};
-    this._initialState = {};
-  }
-
-  _createClass(StoreWrapper, [{
-    key: 'addReducer',
-    value: function addReducer(name, reducer, initialState) {
-      this._reducers[name] = reducer;
-      this._initialState[name] = initialState;
-    }
-  }, {
-    key: 'init',
-    value: function init() {
-      this._store = (0, _redux.createStore)((0, _redux.combineReducers)(this._reducers), this._initialState);
-    }
-  }, {
-    key: 'getStore',
-    value: function getStore() {
-      return this._store;
-    }
-
-    // Store API
-
-  }, {
-    key: 'getState',
-    value: function getState() {
-      return this._store.getState();
-    }
-  }, {
-    key: 'dispatch',
-    value: function dispatch(action) {
-      return this._store.dispatch(action);
-    }
-  }]);
-
-  return StoreWrapper;
-}();
-
-exports.default = new StoreWrapper();
-
-},{"redux":"redux"}],101:[function(require,module,exports){
-"use strict";
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-/* global zxcvbn */
-
-var Zxcvbn = exports.Zxcvbn = function () {
-  function Zxcvbn() {
-    _classCallCheck(this, Zxcvbn);
-  }
-
-  _createClass(Zxcvbn, [{
-    key: "init",
-    value: function init(include) {
-      this._include = include;
-    }
-  }, {
-    key: "scorePassword",
-    value: function scorePassword(password, inputs) {
-      // 0-4 score, the more the stronger password
-      return zxcvbn(password, inputs).score;
-    }
-  }, {
-    key: "load",
-    value: function load() {
-      if (typeof zxcvbn === "undefined") {
-        this._include.include('misago/js/zxcvbn.js');
-        return this._loadingPromise();
-      } else {
-        return this._loadedPromise();
-      }
-    }
-  }, {
-    key: "_loadingPromise",
-    value: function _loadingPromise() {
-      return new Promise(function (resolve) {
-        var wait = function wait() {
-          if (typeof zxcvbn === "undefined") {
-            window.setTimeout(function () {
-              wait();
-            }, 200);
-          } else {
-            resolve();
-          }
-        };
-        wait();
-      });
-    }
-  }, {
-    key: "_loadedPromise",
-    value: function _loadedPromise() {
-      // we have already loaded zxcvbn.js, resolve away!
-      return new Promise(function (resolve) {
-        resolve();
-      });
-    }
-  }]);
-
-  return Zxcvbn;
-}();
-
-exports.default = new Zxcvbn();
-
-},{}],102:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-exports.default = function (ban, changeState) {
-  _reactDom2.default.render(
-  /* jshint ignore:start */
-  _react2.default.createElement(
-    _reactRedux.Provider,
-    { store: _store2.default.getStore() },
-    _react2.default.createElement(RedrawedBannedPage, { message: ban.message,
-      expires: ban.expires_on ? (0, _moment2.default)(ban.expires_on) : null })
-  ),
-  /* jshint ignore:end */
-  document.getElementById('page-mount'));
-
-  if (typeof changeState === 'undefined' || changeState) {
-    var forumName = _index2.default.get('SETTINGS').forum_name;
-    document.title = gettext("You are banned") + ' | ' + forumName;
-    window.history.pushState({}, "", _index2.default.get('BANNED_URL'));
-  }
-};
-
-var _moment = require('moment');
-
-var _moment2 = _interopRequireDefault(_moment);
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactDom = require('react-dom');
-
-var _reactDom2 = _interopRequireDefault(_reactDom);
-
-var _reactRedux = require('react-redux');
-
-var _bannedPage = require('../components/banned-page');
-
-var _bannedPage2 = _interopRequireDefault(_bannedPage);
-
-var _index = require('../index');
-
-var _index2 = _interopRequireDefault(_index);
-
-var _store = require('../services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-// jshint ignore:line
-
-/* jshint ignore:start */
-// jshint ignore:line
-// jshint ignore:line
-var select = function select(state) {
-  return state.tick;
-}; // jshint ignore:line
-// jshint ignore:line
-
-var RedrawedBannedPage = (0, _reactRedux.connect)(select)(_bannedPage2.default);
-/* jshint ignore:end */
-
-},{"../components/banned-page":50,"../index":85,"../services/store":100,"moment":"moment","react":"react","react-dom":"react-dom","react-redux":"react-redux"}],103:[function(require,module,exports){
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-exports.default = function (list, rowWidth) {
-  var padding = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
-
-  var rows = [];
-  var row = [];
-
-  list.forEach(function (element) {
-    row.push(element);
-    if (row.length === rowWidth) {
-      rows.push(row);
-      row = [];
-    }
-  });
-
-  // pad row to required length?
-  if (padding !== false && row.length > 0 && row.length < rowWidth) {
-    for (var i = row.length; i < rowWidth; i++) {
-      row.push(padding);
-    }
-  }
-
-  if (row.length) {
-    rows.push(row);
-  }
-
-  return rows;
-};
-
-},{}],104:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-exports.default = function (bytes) {
-  if (bytes > 1000 * 1000 * 1000) {
-    return Math.round(bytes * 100 / (1000 * 1000 * 1000)) / 100 + ' GB';
-  } else if (bytes > 1000 * 1000) {
-    return Math.round(bytes * 100 / (1000 * 1000)) / 100 + ' MB';
-  } else if (bytes > 1000) {
-    return Math.round(bytes * 100 / 1000) / 100 + ' KB';
-  } else {
-    return Math.round(bytes * 100) / 100 + ' B';
-  }
-};
-
-},{}],105:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-exports.default = function (Component, rootElementId) {
-  var connected = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];
-
-  var rootElement = document.getElementById(rootElementId);
-
-  if (rootElement) {
-    if (connected) {
-      _reactDom2.default.render(
-      /* jshint ignore:start */
-      _react2.default.createElement(
-        _reactRedux.Provider,
-        { store: _store2.default.getStore() },
-        _react2.default.createElement(Component, null)
-      ),
-      /* jshint ignore:end */
-      rootElement);
-    } else {
-      _reactDom2.default.render(
-      /* jshint ignore:start */
-      _react2.default.createElement(Component, null),
-      /* jshint ignore:end */
-      rootElement);
-    }
-  }
-};
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactDom = require('react-dom');
-
-var _reactDom2 = _interopRequireDefault(_reactDom);
-
-var _reactRedux = require('react-redux');
-
-var _store = require('../services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-},{"../services/store":100,"react":"react","react-dom":"react-dom","react-redux":"react-redux"}],106:[function(require,module,exports){
-"use strict";
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-var OrderedList = function () {
-  function OrderedList(items) {
-    _classCallCheck(this, OrderedList);
-
-    this.isOrdered = false;
-    this._items = items || [];
-  }
-
-  _createClass(OrderedList, [{
-    key: "add",
-    value: function add(key, item, order) {
-      this._items.push({
-        key: key,
-        item: item,
-
-        after: order ? order.after || null : null,
-        before: order ? order.before || null : null
-      });
-    }
-  }, {
-    key: "get",
-    value: function get(key, value) {
-      for (var i = 0; i < this._items.length; i++) {
-        if (this._items[i].key === key) {
-          return this._items[i].item;
-        }
-      }
-
-      return value;
-    }
-  }, {
-    key: "has",
-    value: function has(key) {
-      return this.get(key) !== undefined;
-    }
-  }, {
-    key: "values",
-    value: function values() {
-      var values = [];
-      for (var i = 0; i < this._items.length; i++) {
-        values.push(this._items[i].item);
-      }
-      return values;
-    }
-  }, {
-    key: "order",
-    value: function order(values_only) {
-      if (!this.isOrdered) {
-        this._items = this._order(this._items);
-        this.isOrdered = true;
-      }
-
-      if (values_only || typeof values_only === 'undefined') {
-        return this.values();
-      } else {
-        return this._items;
-      }
-    }
-  }, {
-    key: "orderedValues",
-    value: function orderedValues() {
-      return this.order(true);
-    }
-  }, {
-    key: "_order",
-    value: function _order(unordered) {
-      // Index of unordered items
-      var index = [];
-      unordered.forEach(function (item) {
-        index.push(item.key);
-      });
-
-      // Ordered items
-      var ordered = [];
-      var ordering = [];
-
-      // First pass: register items that
-      // don't specify their order
-      unordered.forEach(function (item) {
-        if (!item.after && !item.before) {
-          ordered.push(item);
-          ordering.push(item.key);
-        }
-      });
-
-      // Second pass: register items that
-      // specify their before to "_end"
-      unordered.forEach(function (item) {
-        if (item.before === "_end") {
-          ordered.push(item);
-          ordering.push(item.key);
-        }
-      });
-
-      // Third pass: keep iterating items
-      // until we hit iterations limit or finish
-      // ordering list
-      function insertItem(item) {
-        var insertAt = -1;
-        if (ordering.indexOf(item.key) === -1) {
-          if (item.after) {
-            insertAt = ordering.indexOf(item.after);
-            if (insertAt !== -1) {
-              insertAt += 1;
-            }
-          } else if (item.before) {
-            insertAt = ordering.indexOf(item.before);
-          }
-
-          if (insertAt !== -1) {
-            ordered.splice(insertAt, 0, item);
-            ordering.splice(insertAt, 0, item.key);
-          }
-        }
-      }
-
-      var iterations = 200;
-      while (iterations > 0 && index.length !== ordering.length) {
-        iterations -= 1;
-        unordered.forEach(insertItem);
-      }
-
-      return ordered;
-    }
-  }]);
-
-  return OrderedList;
-}();
-
-exports.default = OrderedList;
-
-},{}],107:[function(require,module,exports){
-"use strict";
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.int = int;
-exports.range = range;
-function int(min, max) {
-  return Math.floor(Math.random() * (max + 1)) + min;
-}
-
-function range(min, max) {
-  var array = new Array(int(min, max));
-  for (var i = 0; i < array.length; i++) {
-    array[i] = i;
-  }
-
-  return array;
-}
-
-},{}],108:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-
-exports.default = function (options) {
-  var routes = {
-    component: options.component,
-    childRoutes: [{
-      path: options.root,
-      onEnter: function onEnter(nextState, replaceState) {
-        replaceState(null, options.paths[0].path);
-      }
-    }].concat(options.paths.map(function (path) {
-      return path;
-    }))
-  };
-
-  _reactDom2.default.render(_react2.default.createElement(
-    _reactRedux.Provider,
-    { store: _store2.default.getStore() },
-    _react2.default.createElement(_reactRouter.Router, { routes: routes, history: history })
-  ), rootElement);
-};
-
-var _react = require('react');
-
-var _react2 = _interopRequireDefault(_react);
-
-var _reactDom = require('react-dom');
-
-var _reactDom2 = _interopRequireDefault(_reactDom);
-
-var _reactRedux = require('react-redux');
-
-var _reactRouter = require('react-router');
-
-var _createBrowserHistory = require('history/lib/createBrowserHistory');
-
-var _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);
-
-var _store = require('../services/store');
-
-var _store2 = _interopRequireDefault(_store);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-// jshint ignore:start
-
-var rootElement = document.getElementById('page-mount');
-var history = new _createBrowserHistory2.default();
-
-},{"../services/store":100,"history/lib/createBrowserHistory":38,"react":"react","react-dom":"react-dom","react-redux":"react-redux","react-router":"react-router"}],109:[function(require,module,exports){
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.required = required;
-exports.email = email;
-exports.minLength = minLength;
-exports.maxLength = maxLength;
-exports.usernameMinLength = usernameMinLength;
-exports.usernameMaxLength = usernameMaxLength;
-exports.usernameContent = usernameContent;
-exports.passwordMinLength = passwordMinLength;
-var EMAIL = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
-var USERNAME = new RegExp('^[0-9a-z]+$', 'i');
-
-function required() {
-  return function (value) {
-    if ($.trim(value).length === 0) {
-      return gettext("This field is required.");
-    }
-  };
-}
-
-function email(message) {
-  return function (value) {
-    if (!EMAIL.test(value)) {
-      return message || gettext("Enter a valid email address.");
-    }
-  };
-}
-
-function minLength(limitValue, message) {
-  return function (value) {
-    var returnMessage = '';
-    var length = $.trim(value).length;
-
-    if (length < limitValue) {
-      if (message) {
-        returnMessage = message(limitValue, length);
-      } else {
-        returnMessage = ngettext("Ensure this value has at least %(limit_value)s character (it has %(show_value)s).", "Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).", limitValue);
-      }
-      return interpolate(returnMessage, {
-        limit_value: limitValue,
-        show_value: length
-      }, true);
-    }
-  };
-}
-
-function maxLength(limitValue, message) {
-  return function (value) {
-    var returnMessage = '';
-    var length = $.trim(value).length;
-
-    if (length > limitValue) {
-      if (message) {
-        returnMessage = message(limitValue, length);
-      } else {
-        returnMessage = ngettext("Ensure this value has at most %(limit_value)s character (it has %(show_value)s).", "Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).", limitValue);
-      }
-      return interpolate(returnMessage, {
-        limit_value: limitValue,
-        show_value: length
-      }, true);
-    }
-  };
-}
-
-function usernameMinLength(settings) {
-  var message = function message(limitValue) {
-    return ngettext("Username must be at least %(limit_value)s character long.", "Username must be at least %(limit_value)s characters long.", limitValue);
-  };
-  return this.minLength(settings.username_length_min, message);
-}
-
-function usernameMaxLength(settings) {
-  var message = function message(limitValue) {
-    return ngettext("Username cannot be longer than %(limit_value)s character.", "Username cannot be longer than %(limit_value)s characters.", limitValue);
-  };
-  return this.maxLength(settings.username_length_max, message);
-}
-
-function usernameContent() {
-  return function (value) {
-    if (!USERNAME.test($.trim(value))) {
-      return gettext("Username can only contain latin alphabet letters and digits.");
-    }
-  };
-}
-
-function passwordMinLength(settings) {
-  var message = function message(limitValue) {
-    return ngettext("Valid password must be at least %(limit_value)s character long.", "Valid password must be at least %(limit_value)s characters long.", limitValue);
-  };
-  return this.minLength(settings.password_length_min, message);
-}
-
-},{}]},{},[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29])
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwic3JjL2luZGV4LmpzIiwic3JjL2luaXRpYWxpemVycy9hamF4LmpzIiwic3JjL2luaXRpYWxpemVycy9hdXRoLW1lc3NhZ2UtY29tcG9uZW50LmpzIiwic3JjL2luaXRpYWxpemVycy9hdXRoLXJlZHVjZXIuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL2F1dGguanMiLCJzcmMvaW5pdGlhbGl6ZXJzL2Jhbm5lZC1wYWdlLWNvbXBvbmVudC5qcyIsInNyYy9pbml0aWFsaXplcnMvY2F0Y2hhLmpzIiwic3JjL2luaXRpYWxpemVycy9pbmNsdWRlLmpzIiwic3JjL2luaXRpYWxpemVycy9sb2NhbC1zdG9yYWdlLmpzIiwic3JjL2luaXRpYWxpemVycy9tb2JpbGUtbmF2YmFyLWRyb3Bkb3duLmpzIiwic3JjL2luaXRpYWxpemVycy9tb2RhbC5qcyIsInNyYy9pbml0aWFsaXplcnMvbW9tZW50LWxvY2FsZS5qcyIsInNyYy9pbml0aWFsaXplcnMvb3B0aW9ucy1jb21wb25lbnQuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3BhZ2UtdGl0bGUuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3JlcXVlc3QtYWN0aXZhdGlvbi1saW5rLWNvbXBvbmVudC5qcyIsInNyYy9pbml0aWFsaXplcnMvcmVxdWVzdC1wYXNzd29yZC1yZXNldC1jb21wb25lbnQuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3Jlc2V0LXBhc3N3b3JkLWZvcm0tY29tcG9uZW50LmpzIiwic3JjL2luaXRpYWxpemVycy9zbmFja2Jhci1jb21wb25lbnQuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3NuYWNrYmFyLXJlZHVjZXIuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3NuYWNrYmFyLmpzIiwic3JjL2luaXRpYWxpemVycy9zdG9yZS5qcyIsInNyYy9pbml0aWFsaXplcnMvdGljay1yZWR1Y2VyLmpzIiwic3JjL2luaXRpYWxpemVycy90aWNrLXN0YXJ0LmpzIiwic3JjL2luaXRpYWxpemVycy91c2VyLW1lbnUtY29tcG9uZW50LmpzIiwic3JjL2luaXRpYWxpemVycy91c2VybmFtZS1oaXN0b3J5LXJlZHVjZXIuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3VzZXJzLWNvbXBvbmVudC5qcyIsInNyYy9pbml0aWFsaXplcnMvdXNlcnMtcmVkdWNlci5qcyIsInNyYy9pbml0aWFsaXplcnMvenhjdmJuLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9pbmRleC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2lzX2FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2tleXMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9BY3Rpb25zLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvQXN5bmNVdGlscy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0RPTVN0YXRlU3RvcmFnZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0RPTVV0aWxzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9jcmVhdGVCcm93c2VySGlzdG9yeS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL2NyZWF0ZURPTUhpc3RvcnkuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9jcmVhdGVIaXN0b3J5LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvY3JlYXRlTG9jYXRpb24uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9kZXByZWNhdGUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9leHRyYWN0UGF0aC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL3BhcnNlUGF0aC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL3J1blRyYW5zaXRpb25Ib29rLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaW52YXJpYW50L2Jyb3dzZXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy93YXJuaW5nL2Jyb3dzZXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL2F1dGgtbWVzc2FnZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvYXZhdGFyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9iYW5uZWQtcGFnZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvYnV0dG9uLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL2Nyb3AuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvZ2FsbGVyeS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9pbmRleC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL3VwbG9hZC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvZm9ybS1ncm91cC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvZm9ybS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvbGkuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL2xvYWRlci5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvbW9kYWwtbG9hZGVyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvb3B0aW9ucy9mb3J1bS1vcHRpb25zLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL25hdnMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvcm9vdC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvb3B0aW9ucy9zaWduLWluLWNyZWRlbnRpYWxzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9wYXNzd29yZC1zdHJlbmd0aC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcmVnaXN0ZXItYnV0dG9uLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9yZWdpc3Rlci5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcmVxdWVzdC1hY3RpdmF0aW9uLWxpbmsuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3JlcXVlc3QtcGFzc3dvcmQtcmVzZXQuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3Jlc2V0LXBhc3N3b3JkLWZvcm0uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3NlbGVjdC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvc2lnbi1pbi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvc25hY2tiYXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXItbWVudS9ndWVzdC1uYXYuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXItbWVudS9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2VyLW1lbnUvdXNlci1uYXYuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXItc3RhdHVzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy9hY3RpdmUtcG9zdGVycy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvbmF2cy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvcmFuay5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvcm9vdC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMveWVzLW5vLXN3aXRjaC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2luZGV4LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvcmVkdWNlcnMvYXV0aC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3JlZHVjZXJzL3NuYWNrYmFyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvcmVkdWNlcnMvdGljay5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3JlZHVjZXJzL3VzZXJuYW1lLWhpc3RvcnkuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9yZWR1Y2Vycy91c2Vycy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL2FqYXguanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy9hdXRoLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvY2FwdGNoYS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL2luY2x1ZGUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvbW9iaWxlLW5hdmJhci1kcm9wZG93bi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL21vZGFsLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvcGFnZS10aXRsZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL3NuYWNrYmFyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvc3RvcmUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy96eGN2Ym4uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy91dGlscy9iYW5uZWQtcGFnZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3V0aWxzL2JhdGNoLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvZmlsZS1zaXplLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvbW91bnQtY29tcG9uZW50LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvb3JkZXJlZC1saXN0LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvcmFuZG9tLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvcm91dGVkLWNvbXBvbmVudC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3V0aWxzL3ZhbGlkYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ3pGYSxNQUFNLFdBQU4sTUFBTTtBQUNqQixXQURXLE1BQU0sR0FDSDswQkFESCxNQUFNOztB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ2pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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VixPQUFPLENBQVksVUFBVSxFQUFFO0FBQ2pDLFdBQU8sUUFBUSxDQUNiLGlFQUFpRSxFQUNqRSxrRUFBa0UsRUFDbEUsVUFBVSxDQUFDLENBQUM7R0FDZixDQUFDO0FBQ0YsU0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQztDQUM5RCIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcblxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gc2V0VGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgc2V0VGltZW91dChkcmFpblF1ZXVlLCAwKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsImltcG9ydCBPcmRlcmVkTGlzdCBmcm9tICdtaXNhZ28vdXRpbHMvb3JkZXJlZC1saXN0JztcblxuZXhwb3J0IGNsYXNzIE1pc2FnbyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2luaXRpYWxpemVycyA9IFtdO1xuICAgIHRoaXMuX2NvbnRleHQgPSB7fTtcbiAgfVxuXG4gIGFkZEluaXRpYWxpemVyKGluaXRpYWxpemVyKSB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZXJzLnB1c2goe1xuICAgICAga2V5OiBpbml0aWFsaXplci5uYW1lLFxuXG4gICAgICBpdGVtOiBpbml0aWFsaXplci5pbml0aWFsaXplcixcblxuICAgICAgYWZ0ZXI6IGluaXRpYWxpemVyLmFmdGVyLFxuICAgICAgYmVmb3JlOiBpbml0aWFsaXplci5iZWZvcmVcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQoY29udGV4dCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgdmFyIGluaXRPcmRlciA9IG5ldyBPcmRlcmVkTGlzdCh0aGlzLl9pbml0aWFsaXplcnMpLm9yZGVyZWRWYWx1ZXMoKTtcbiAgICBpbml0T3JkZXIuZm9yRWFjaChpbml0aWFsaXplciA9PiB7XG4gICAgICBpbml0aWFsaXplcih0aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNvbnRleHQgYWNjZXNzb3JzXG4gIGhhcyhrZXkpIHtcbiAgICByZXR1cm4gISF0aGlzLl9jb250ZXh0W2tleV07XG4gIH1cblxuICBnZXQoa2V5LCBmYWxsYmFjaykge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29udGV4dFtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2sgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHBvcChrZXkpIHtcbiAgICBpZiAodGhpcy5oYXMoa2V5KSkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5fY29udGV4dFtrZXldO1xuICAgICAgdGhpcy5fY29udGV4dFtrZXldID0gbnVsbDtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuLy8gY3JlYXRlICBzaW5nbGV0b25cbnZhciBtaXNhZ28gPSBuZXcgTWlzYWdvKCk7XG5cbi8vIGV4cG9zZSBpdCBnbG9iYWxseVxuZ2xvYmFsLm1pc2FnbyA9IG1pc2FnbztcblxuLy8gYW5kIGV4cG9ydCBpdCBmb3IgdGVzdHMgYW5kIHN0dWZmXG5leHBvcnQgZGVmYXVsdCBtaXNhZ287XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBhamF4LmluaXQobWlzYWdvLmdldCgnQ1NSRl9DT09LSUVfTkFNRScpKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2FqYXgnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBBdXRoTWVzc2FnZSwgeyBzZWxlY3QgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9hdXRoLW1lc3NhZ2UnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9tb3VudC1jb21wb25lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgbW91bnQoY29ubmVjdChzZWxlY3QpKEF1dGhNZXNzYWdlKSwgJ2F1dGgtbWVzc2FnZS1tb3VudCcpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OmF1dGgtbWVzc2FnZScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHJlZHVjZXIsIHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL2F1dGgnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKGNvbnRleHQpIHtcbiAgc3RvcmUuYWRkUmVkdWNlcignYXV0aCcsIHJlZHVjZXIsIE9iamVjdC5hc3NpZ24oe1xuICAgICdpc0F1dGhlbnRpY2F0ZWQnOiBjb250ZXh0LmdldCgnaXNBdXRoZW50aWNhdGVkJyksXG4gICAgJ2lzQW5vbnltb3VzJzogIWNvbnRleHQuZ2V0KCdpc0F1dGhlbnRpY2F0ZWQnKSxcblxuICAgICd1c2VyJzogY29udGV4dC5nZXQoJ3VzZXInKVxuICB9LCBpbml0aWFsU3RhdGUpKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ3JlZHVjZXI6YXV0aCcsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYmVmb3JlOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBhdXRoIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hdXRoJztcbmltcG9ydCBtb2RhbCBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9kYWwnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5pbXBvcnQgc3RvcmFnZSBmcm9tICdtaXNhZ28vc2VydmljZXMvbG9jYWwtc3RvcmFnZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBhdXRoLmluaXQoc3RvcmUsIHN0b3JhZ2UsIG1vZGFsKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2F1dGgnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAnc3RvcmUnXG59KTsiLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgc2hvd0Jhbm5lZFBhZ2UgZnJvbSAnbWlzYWdvL3V0aWxzL2Jhbm5lZC1wYWdlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICBpZiAoY29udGV4dC5oYXMoJ0JBTl9NRVNTQUdFJykpIHtcbiAgICBzaG93QmFubmVkUGFnZShjb250ZXh0LmdldCgnQkFOX01FU1NBR0UnKSwgZmFsc2UpO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjb21wb25lbnQ6YmFuZWQtcGFnZScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IGNhcHRjaGEgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2NhcHRjaGEnO1xuaW1wb3J0IGluY2x1ZGUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2luY2x1ZGUnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKGNvbnRleHQpIHtcbiAgY2FwdGNoYS5pbml0KGNvbnRleHQsIGFqYXgsIGluY2x1ZGUsIHNuYWNrYmFyKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NhcHRjaGEnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGluY2x1ZGUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2luY2x1ZGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcihjb250ZXh0KSB7XG4gIGluY2x1ZGUuaW5pdChjb250ZXh0LmdldCgnU1RBVElDX1VSTCcpKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2luY2x1ZGUnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHN0b3JhZ2UgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgc3RvcmFnZS5pbml0KCdtaXNhZ29fJyk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdsb2NhbC1zdG9yYWdlJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBkcm9wZG93biBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9iaWxlLW5hdmJhci1kcm9wZG93bic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2JpbGUtbmF2YmFyLWRyb3Bkb3duLW1vdW50Jyk7XG4gIGlmIChlbGVtZW50KSB7XG4gICAgZHJvcGRvd24uaW5pdChlbGVtZW50KTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnZHJvcGRvd24nLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgbW9kYWwgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vZGFsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLW1vdW50Jyk7XG4gIGlmIChlbGVtZW50KSB7XG4gICAgbW9kYWwuaW5pdChlbGVtZW50KTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnbW9kYWwnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBtb21lbnQubG9jYWxlKCQoJ2h0bWwnKS5hdHRyKCdsYW5nJykpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnbW9tZW50JyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyXG59KTtcbiIsImltcG9ydCBPcHRpb25zLCB7IHBhdGhzIH0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvb3B0aW9ucy9yb290JztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9yb3V0ZWQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICBpZiAoY29udGV4dC5oYXMoJ1VTRVJfT1BUSU9OUycpKSB7XG4gICAgbW91bnQoe1xuICAgICAgcm9vdDogbWlzYWdvLmdldCgnVVNFUkNQX1VSTCcpLFxuICAgICAgY29tcG9uZW50OiBPcHRpb25zLFxuICAgICAgcGF0aHM6IHBhdGhzKHN0b3JlKVxuICAgIH0pO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjb21wb25lbnQ6b3B0aW9ucycsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICB0aXRsZS5pbml0KGNvbnRleHQuZ2V0KCdTRVRUSU5HUycpLmZvcnVtX25hbWUpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAncGFnZS10aXRsZScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplclxufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgUmVxdWVzdEFjdGl2YXRpb25MaW5rIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3JlcXVlc3QtYWN0aXZhdGlvbi1saW5rJztcbmltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVxdWVzdC1hY3RpdmF0aW9uLWxpbmstbW91bnQnKSkge1xuICAgIG1vdW50KFJlcXVlc3RBY3RpdmF0aW9uTGluaywgJ3JlcXVlc3QtYWN0aXZhdGlvbi1saW5rLW1vdW50JywgZmFsc2UpO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjb21wb25lbnQ6cmVxdWVzdC1hY3RpdmF0aW9uLWxpbmsnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBSZXF1ZXN0UGFzc3dvcmRSZXNldCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9yZXF1ZXN0LXBhc3N3b3JkLXJlc2V0JztcbmltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVxdWVzdC1wYXNzd29yZC1yZXNldC1tb3VudCcpKSB7XG4gICAgbW91bnQoUmVxdWVzdFBhc3N3b3JkUmVzZXQsICdyZXF1ZXN0LXBhc3N3b3JkLXJlc2V0LW1vdW50JywgZmFsc2UpO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjb21wb25lbnQ6cmVxdWVzdC1wYXNzd29yZC1yZXNldCcsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IFJlc2V0UGFzc3dvcmRGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3Jlc2V0LXBhc3N3b3JkLWZvcm0nO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9tb3VudC1jb21wb25lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNldC1wYXNzd29yZC1mb3JtLW1vdW50JykpIHtcbiAgICBtb3VudChSZXNldFBhc3N3b3JkRm9ybSwgJ3Jlc2V0LXBhc3N3b3JkLWZvcm0tbW91bnQnLCBmYWxzZSk7XG4gIH1cbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NvbXBvbmVudDpyZXNldC1wYXNzd29yZC1mb3JtJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHsgU25hY2tiYXIsIHNlbGVjdCB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3NuYWNrYmFyJztcbmltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIG1vdW50KGNvbm5lY3Qoc2VsZWN0KShTbmFja2JhciksICdzbmFja2Jhci1tb3VudCcpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnNuYWNrYmFyJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3NuYWNrYmFyJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgcmVkdWNlciwgeyBpbml0aWFsU3RhdGUgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvc25hY2tiYXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBzdG9yZS5hZGRSZWR1Y2VyKCdzbmFja2JhcicsIHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdyZWR1Y2VyOnNuYWNrYmFyJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBiZWZvcmU6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIHNuYWNrYmFyLmluaXQoc3RvcmUpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnc25hY2tiYXInLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgc3RvcmUuaW5pdCgpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnc3RvcmUnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ19lbmQnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCByZWR1Y2VyLCB7IGluaXRpYWxTdGF0ZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy90aWNrJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgc3RvcmUuYWRkUmVkdWNlcigndGljaycsIHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdyZWR1Y2VyOnRpY2snLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgeyBkb1RpY2sgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdGljayc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuY29uc3QgVElDS19QRVJJT0QgPSA1MCAqIDEwMDA7IC8vZG8gdGhlIHRpY2sgZXZlcnkgNTBzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgc3RvcmUuZGlzcGF0Y2goZG9UaWNrKCkpO1xuICB9LCBUSUNLX1BFUklPRCk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICd0aWNrLXN0YXJ0JyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHsgVXNlck1lbnUsIENvbXBhY3RVc2VyTWVudSwgc2VsZWN0IH0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlci1tZW51L3Jvb3QnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9tb3VudC1jb21wb25lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgbW91bnQoY29ubmVjdChzZWxlY3QpKFVzZXJNZW51KSwgJ3VzZXItbWVudS1tb3VudCcpO1xuICBtb3VudChjb25uZWN0KHNlbGVjdCkoQ29tcGFjdFVzZXJNZW51KSwgJ3VzZXItbWVudS1jb21wYWN0LW1vdW50Jyk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjb21wb25lbnQ6dXNlci1tZW51JyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcm5hbWUtaGlzdG9yeSc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIHN0b3JlLmFkZFJlZHVjZXIoJ3VzZXJuYW1lLWhpc3RvcnknLCByZWR1Y2VyLCBbXSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdyZWR1Y2VyOnVzZXJuYW1lLWhpc3RvcnknLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgVXNlcnMsIHsgcGF0aHMgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9yb290JztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9yb3V0ZWQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICBpZiAoY29udGV4dC5oYXMoJ1VTRVJTX0xJU1RTJykpIHtcbiAgICBtb3VudCh7XG4gICAgICByb290OiBtaXNhZ28uZ2V0KCdVU0VSU19MSVNUX1VSTCcpLFxuICAgICAgY29tcG9uZW50OiBVc2VycyxcbiAgICAgIHBhdGhzOiBwYXRocyhzdG9yZSlcbiAgICB9KTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnVzZXJzJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcnMnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBzdG9yZS5hZGRSZWR1Y2VyKCd1c2VycycsIHJlZHVjZXIsIFtdKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ3JlZHVjZXI6dXNlcnMnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgaW5jbHVkZSBmcm9tICdtaXNhZ28vc2VydmljZXMvaW5jbHVkZSc7XG5pbXBvcnQgenhjdmJuIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy96eGN2Ym4nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgenhjdmJuLmluaXQoaW5jbHVkZSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICd6eGN2Ym4nLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwidmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi9saWIva2V5cy5qcycpO1xudmFyIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9saWIvaXNfYXJndW1lbnRzLmpzJyk7XG5cbnZhciBkZWVwRXF1YWwgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKSB7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICAvLyA3LjEuIEFsbCBpZGVudGljYWwgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9IGVsc2UgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIERhdGUgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsXG4gIC8vIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIH0gZWxzZSBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQgfHwgdHlwZW9mIGFjdHVhbCAhPSAnb2JqZWN0JyAmJiB0eXBlb2YgZXhwZWN0ZWQgIT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBhY3R1YWwgPT09IGV4cGVjdGVkIDogYWN0dWFsID09IGV4cGVjdGVkO1xuXG4gIC8vIDcuNC4gRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2Uge1xuICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZE9yTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKHgpIHtcbiAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgeC5sZW5ndGggIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgeC5jb3B5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB4LnNsaWNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh4Lmxlbmd0aCA+IDAgJiYgdHlwZW9mIHhbMF0gIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBvcHRzKSB7XG4gIHZhciBpLCBrZXk7XG4gIGlmIChpc1VuZGVmaW5lZE9yTnVsbChhKSB8fCBpc1VuZGVmaW5lZE9yTnVsbChiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS5cbiAgaWYgKGEucHJvdG90eXBlICE9PSBiLnByb3RvdHlwZSkgcmV0dXJuIGZhbHNlO1xuICAvL35+fkkndmUgbWFuYWdlZCB0byBicmVhayBPYmplY3Qua2V5cyB0aHJvdWdoIHNjcmV3eSBhcmd1bWVudHMgcGFzc2luZy5cbiAgLy8gICBDb252ZXJ0aW5nIHRvIGFycmF5IHNvbHZlcyB0aGUgcHJvYmxlbS5cbiAgaWYgKGlzQXJndW1lbnRzKGEpKSB7XG4gICAgaWYgKCFpc0FyZ3VtZW50cyhiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBkZWVwRXF1YWwoYSwgYiwgb3B0cyk7XG4gIH1cbiAgaWYgKGlzQnVmZmVyKGEpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIGthID0gb2JqZWN0S2V5cyhhKSxcbiAgICAgICAga2IgPSBvYmplY3RLZXlzKGIpO1xuICB9IGNhdGNoIChlKSB7Ly9oYXBwZW5zIHdoZW4gb25lIGlzIGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZSBvdGhlciBpc24ndFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzXG4gIC8vIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9IGtiLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vdGhlIHNhbWUgc2V0IG9mIGtleXMgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksXG4gIGthLnNvcnQoKTtcbiAga2Iuc29ydCgpO1xuICAvL35+fmNoZWFwIGtleSB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGthW2ldICE9IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIG9wdHMpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYjtcbn1cbiIsInZhciBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID0gKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzKVxufSkoKSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA/IHN1cHBvcnRlZCA6IHVuc3VwcG9ydGVkO1xuXG5leHBvcnRzLnN1cHBvcnRlZCA9IHN1cHBvcnRlZDtcbmZ1bmN0aW9uIHN1cHBvcnRlZChvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxuZXhwb3J0cy51bnN1cHBvcnRlZCA9IHVuc3VwcG9ydGVkO1xuZnVuY3Rpb24gdW5zdXBwb3J0ZWQob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PSAnbnVtYmVyJyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdjYWxsZWUnKSAmJlxuICAgICFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCAnY2FsbGVlJykgfHxcbiAgICBmYWxzZTtcbn07XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbidcbiAgPyBPYmplY3Qua2V5cyA6IHNoaW07XG5cbmV4cG9ydHMuc2hpbSA9IHNoaW07XG5mdW5jdGlvbiBzaGltIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwiLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCBuYXZpZ2F0aW9uIHdhcyBjYXVzZWQgYnkgYSBjYWxsIHRvIGhpc3RvcnkucHVzaC5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIFBVU0ggPSAnUFVTSCc7XG5cbmV4cG9ydHMuUFVTSCA9IFBVU0g7XG4vKipcbiAqIEluZGljYXRlcyB0aGF0IG5hdmlnYXRpb24gd2FzIGNhdXNlZCBieSBhIGNhbGwgdG8gaGlzdG9yeS5yZXBsYWNlLlxuICovXG52YXIgUkVQTEFDRSA9ICdSRVBMQUNFJztcblxuZXhwb3J0cy5SRVBMQUNFID0gUkVQTEFDRTtcbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgbmF2aWdhdGlvbiB3YXMgY2F1c2VkIGJ5IHNvbWUgb3RoZXIgYWN0aW9uIHN1Y2hcbiAqIGFzIHVzaW5nIGEgYnJvd3NlcidzIGJhY2svZm9yd2FyZCBidXR0b25zIGFuZC9vciBtYW51YWxseSBtYW5pcHVsYXRpbmdcbiAqIHRoZSBVUkwgaW4gYSBicm93c2VyJ3MgbG9jYXRpb24gYmFyLiBUaGlzIGlzIHRoZSBkZWZhdWx0LlxuICpcbiAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93RXZlbnRIYW5kbGVycy9vbnBvcHN0YXRlXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqL1xudmFyIFBPUCA9ICdQT1AnO1xuXG5leHBvcnRzLlBPUCA9IFBPUDtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHtcbiAgUFVTSDogUFVTSCxcbiAgUkVQTEFDRTogUkVQTEFDRSxcbiAgUE9QOiBQT1Bcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmxvb3BBc3luYyA9IGxvb3BBc3luYztcblxuZnVuY3Rpb24gbG9vcEFzeW5jKHR1cm5zLCB3b3JrLCBjYWxsYmFjaykge1xuICB2YXIgY3VycmVudFR1cm4gPSAwO1xuICB2YXIgaXNEb25lID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICBpc0RvbmUgPSB0cnVlO1xuICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIGlmIChpc0RvbmUpIHJldHVybjtcblxuICAgIGlmIChjdXJyZW50VHVybiA8IHR1cm5zKSB7XG4gICAgICB3b3JrLmNhbGwodGhpcywgY3VycmVudFR1cm4rKywgbmV4dCwgZG9uZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBuZXh0KCk7XG59IiwiLyplc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5zYXZlU3RhdGUgPSBzYXZlU3RhdGU7XG5leHBvcnRzLnJlYWRTdGF0ZSA9IHJlYWRTdGF0ZTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX3dhcm5pbmcgPSByZXF1aXJlKCd3YXJuaW5nJyk7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxudmFyIEtleVByZWZpeCA9ICdAQEhpc3RvcnkvJztcbnZhciBRdW90YUV4Y2VlZGVkRXJyb3IgPSAnUXVvdGFFeGNlZWRlZEVycm9yJztcbnZhciBTZWN1cml0eUVycm9yID0gJ1NlY3VyaXR5RXJyb3InO1xuXG5mdW5jdGlvbiBjcmVhdGVLZXkoa2V5KSB7XG4gIHJldHVybiBLZXlQcmVmaXggKyBrZXk7XG59XG5cbmZ1bmN0aW9uIHNhdmVTdGF0ZShrZXksIHN0YXRlKSB7XG4gIHRyeSB7XG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oY3JlYXRlS2V5KGtleSksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLm5hbWUgPT09IFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgIC8vIEJsb2NraW5nIGNvb2tpZXMgaW4gQ2hyb21lL0ZpcmVmb3gvU2FmYXJpIHRocm93cyBTZWN1cml0eUVycm9yIG9uIGFueVxuICAgICAgLy8gYXR0ZW1wdCB0byBhY2Nlc3Mgd2luZG93LnNlc3Npb25TdG9yYWdlLlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF93YXJuaW5nMlsnZGVmYXVsdCddKGZhbHNlLCAnW2hpc3RvcnldIFVuYWJsZSB0byBzYXZlIHN0YXRlOyBzZXNzaW9uU3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlIGR1ZSB0byBzZWN1cml0eSBzZXR0aW5ncycpIDogdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGVycm9yLm5hbWUgPT09IFF1b3RhRXhjZWVkZWRFcnJvciAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBTYWZhcmkgXCJwcml2YXRlIG1vZGVcIiB0aHJvd3MgUXVvdGFFeGNlZWRlZEVycm9yLlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF93YXJuaW5nMlsnZGVmYXVsdCddKGZhbHNlLCAnW2hpc3RvcnldIFVuYWJsZSB0byBzYXZlIHN0YXRlOyBzZXNzaW9uU3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlIGluIFNhZmFyaSBwcml2YXRlIG1vZGUnKSA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRTdGF0ZShrZXkpIHtcbiAgdmFyIGpzb24gPSB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAganNvbiA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGNyZWF0ZUtleShrZXkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IubmFtZSA9PT0gU2VjdXJpdHlFcnJvcikge1xuICAgICAgLy8gQmxvY2tpbmcgY29va2llcyBpbiBDaHJvbWUvRmlyZWZveC9TYWZhcmkgdGhyb3dzIFNlY3VyaXR5RXJyb3Igb24gYW55XG4gICAgICAvLyBhdHRlbXB0IHRvIGFjY2VzcyB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX3dhcm5pbmcyWydkZWZhdWx0J10oZmFsc2UsICdbaGlzdG9yeV0gVW5hYmxlIHRvIHJlYWQgc3RhdGU7IHNlc3Npb25TdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUgZHVlIHRvIHNlY3VyaXR5IHNldHRpbmdzJykgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlmIChqc29uKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGpzb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZ25vcmUgaW52YWxpZCBKU09OLlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuYWRkRXZlbnRMaXN0ZW5lciA9IGFkZEV2ZW50TGlzdGVuZXI7XG5leHBvcnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSByZW1vdmVFdmVudExpc3RlbmVyO1xuZXhwb3J0cy5nZXRIYXNoUGF0aCA9IGdldEhhc2hQYXRoO1xuZXhwb3J0cy5yZXBsYWNlSGFzaFBhdGggPSByZXBsYWNlSGFzaFBhdGg7XG5leHBvcnRzLmdldFdpbmRvd1BhdGggPSBnZXRXaW5kb3dQYXRoO1xuZXhwb3J0cy5nbyA9IGdvO1xuZXhwb3J0cy5nZXRVc2VyQ29uZmlybWF0aW9uID0gZ2V0VXNlckNvbmZpcm1hdGlvbjtcbmV4cG9ydHMuc3VwcG9ydHNIaXN0b3J5ID0gc3VwcG9ydHNIaXN0b3J5O1xuZXhwb3J0cy5zdXBwb3J0c0dvV2l0aG91dFJlbG9hZFVzaW5nSGFzaCA9IHN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoO1xuXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50LCBsaXN0ZW5lcikge1xuICBpZiAobm9kZS5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBsaXN0ZW5lcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihub2RlLCBldmVudCwgbGlzdGVuZXIpIHtcbiAgaWYgKG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmRldGFjaEV2ZW50KCdvbicgKyBldmVudCwgbGlzdGVuZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhhc2hQYXRoKCkge1xuICAvLyBXZSBjYW4ndCB1c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggaGVyZSBiZWNhdXNlIGl0J3Mgbm90XG4gIC8vIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzIC0gRmlyZWZveCB3aWxsIHByZS1kZWNvZGUgaXQhXG4gIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnIycpWzFdIHx8ICcnO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlSGFzaFBhdGgocGF0aCkge1xuICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgJyMnICsgcGF0aCk7XG59XG5cbmZ1bmN0aW9uIGdldFdpbmRvd1BhdGgoKSB7XG4gIHJldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgd2luZG93LmxvY2F0aW9uLmhhc2g7XG59XG5cbmZ1bmN0aW9uIGdvKG4pIHtcbiAgaWYgKG4pIHdpbmRvdy5oaXN0b3J5LmdvKG4pO1xufVxuXG5mdW5jdGlvbiBnZXRVc2VyQ29uZmlybWF0aW9uKG1lc3NhZ2UsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIEhUTUw1IGhpc3RvcnkgQVBJIGlzIHN1cHBvcnRlZC4gVGFrZW4gZnJvbSBNb2Rlcm5penIuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICogaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9tYXN0ZXIvZmVhdHVyZS1kZXRlY3RzL2hpc3RvcnkuanNcbiAqIGNoYW5nZWQgdG8gYXZvaWQgZmFsc2UgbmVnYXRpdmVzIGZvciBXaW5kb3dzIFBob25lczogaHR0cHM6Ly9naXRodWIuY29tL3JhY2t0L3JlYWN0LXJvdXRlci9pc3N1ZXMvNTg2XG4gKi9cblxuZnVuY3Rpb24gc3VwcG9ydHNIaXN0b3J5KCkge1xuICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICBpZiAoKHVhLmluZGV4T2YoJ0FuZHJvaWQgMi4nKSAhPT0gLTEgfHwgdWEuaW5kZXhPZignQW5kcm9pZCA0LjAnKSAhPT0gLTEpICYmIHVhLmluZGV4T2YoJ01vYmlsZSBTYWZhcmknKSAhPT0gLTEgJiYgdWEuaW5kZXhPZignQ2hyb21lJykgPT09IC0xICYmIHVhLmluZGV4T2YoJ1dpbmRvd3MgUGhvbmUnKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gRklYTUU6IFdvcmsgYXJvdW5kIG91ciBicm93c2VyIGhpc3Rvcnkgbm90IHdvcmtpbmcgY29ycmVjdGx5IG9uIENocm9tZVxuICAvLyBpT1M6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWNrdC9yZWFjdC1yb3V0ZXIvaXNzdWVzLzI1NjVcbiAgaWYgKHVhLmluZGV4T2YoJ0NyaU9TJykgIT09IC0xKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB3aW5kb3cuaGlzdG9yeSAmJiAncHVzaFN0YXRlJyBpbiB3aW5kb3cuaGlzdG9yeTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGZhbHNlIGlmIHVzaW5nIGdvKG4pIHdpdGggaGFzaCBoaXN0b3J5IGNhdXNlcyBhIGZ1bGwgcGFnZSByZWxvYWQuXG4gKi9cblxuZnVuY3Rpb24gc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2goKSB7XG4gIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIHJldHVybiB1YS5pbmRleE9mKCdGaXJlZm94JykgPT09IC0xO1xufSIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuZXhwb3J0cy5jYW5Vc2VET00gPSBjYW5Vc2VET007IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5cbnZhciBfaW52YXJpYW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ludmFyaWFudCk7XG5cbnZhciBfQWN0aW9ucyA9IHJlcXVpcmUoJy4vQWN0aW9ucycpO1xuXG52YXIgX0V4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgX0RPTVV0aWxzID0gcmVxdWlyZSgnLi9ET01VdGlscycpO1xuXG52YXIgX0RPTVN0YXRlU3RvcmFnZSA9IHJlcXVpcmUoJy4vRE9NU3RhdGVTdG9yYWdlJyk7XG5cbnZhciBfY3JlYXRlRE9NSGlzdG9yeSA9IHJlcXVpcmUoJy4vY3JlYXRlRE9NSGlzdG9yeScpO1xuXG52YXIgX2NyZWF0ZURPTUhpc3RvcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlRE9NSGlzdG9yeSk7XG5cbnZhciBfcGFyc2VQYXRoID0gcmVxdWlyZSgnLi9wYXJzZVBhdGgnKTtcblxudmFyIF9wYXJzZVBhdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGFyc2VQYXRoKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgaGlzdG9yeSBvYmplY3QgdGhhdCB1c2VzIEhUTUw1J3MgaGlzdG9yeSBBUElcbiAqIChwdXNoU3RhdGUsIHJlcGxhY2VTdGF0ZSwgYW5kIHRoZSBwb3BzdGF0ZSBldmVudCkgdG8gbWFuYWdlIGhpc3RvcnkuXG4gKiBUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCBtZXRob2Qgb2YgbWFuYWdpbmcgaGlzdG9yeSBpbiBicm93c2VycyBiZWNhdXNlXG4gKiBpdCBwcm92aWRlcyB0aGUgY2xlYW5lc3QgVVJMcy5cbiAqXG4gKiBOb3RlOiBJbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZSBIVE1MNSBoaXN0b3J5IEFQSSBmdWxsXG4gKiBwYWdlIHJlbG9hZHMgd2lsbCBiZSB1c2VkIHRvIHByZXNlcnZlIFVSTHMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJIaXN0b3J5KCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdO1xuXG4gICFfRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF9pbnZhcmlhbnQyWydkZWZhdWx0J10oZmFsc2UsICdCcm93c2VyIGhpc3RvcnkgbmVlZHMgYSBET00nKSA6IF9pbnZhcmlhbnQyWydkZWZhdWx0J10oZmFsc2UpIDogdW5kZWZpbmVkO1xuXG4gIHZhciBmb3JjZVJlZnJlc2ggPSBvcHRpb25zLmZvcmNlUmVmcmVzaDtcblxuICB2YXIgaXNTdXBwb3J0ZWQgPSBfRE9NVXRpbHMuc3VwcG9ydHNIaXN0b3J5KCk7XG4gIHZhciB1c2VSZWZyZXNoID0gIWlzU3VwcG9ydGVkIHx8IGZvcmNlUmVmcmVzaDtcblxuICBmdW5jdGlvbiBnZXRDdXJyZW50TG9jYXRpb24oaGlzdG9yeVN0YXRlKSB7XG4gICAgaGlzdG9yeVN0YXRlID0gaGlzdG9yeVN0YXRlIHx8IHdpbmRvdy5oaXN0b3J5LnN0YXRlIHx8IHt9O1xuXG4gICAgdmFyIHBhdGggPSBfRE9NVXRpbHMuZ2V0V2luZG93UGF0aCgpO1xuICAgIHZhciBfaGlzdG9yeVN0YXRlID0gaGlzdG9yeVN0YXRlO1xuICAgIHZhciBrZXkgPSBfaGlzdG9yeVN0YXRlLmtleTtcblxuICAgIHZhciBzdGF0ZSA9IHVuZGVmaW5lZDtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBzdGF0ZSA9IF9ET01TdGF0ZVN0b3JhZ2UucmVhZFN0YXRlKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgIGtleSA9IGhpc3RvcnkuY3JlYXRlS2V5KCk7XG5cbiAgICAgIGlmIChpc1N1cHBvcnRlZCkgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKF9leHRlbmRzKHt9LCBoaXN0b3J5U3RhdGUsIHsga2V5OiBrZXkgfSksIG51bGwsIHBhdGgpO1xuICAgIH1cblxuICAgIHZhciBsb2NhdGlvbiA9IF9wYXJzZVBhdGgyWydkZWZhdWx0J10ocGF0aCk7XG5cbiAgICByZXR1cm4gaGlzdG9yeS5jcmVhdGVMb2NhdGlvbihfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHsgc3RhdGU6IHN0YXRlIH0pLCB1bmRlZmluZWQsIGtleSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydFBvcFN0YXRlTGlzdGVuZXIoX3JlZikge1xuICAgIHZhciB0cmFuc2l0aW9uVG8gPSBfcmVmLnRyYW5zaXRpb25UbztcblxuICAgIGZ1bmN0aW9uIHBvcFN0YXRlTGlzdGVuZXIoZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5zdGF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIElnbm9yZSBleHRyYW5lb3VzIHBvcHN0YXRlIGV2ZW50cyBpbiBXZWJLaXQuXG5cbiAgICAgIHRyYW5zaXRpb25UbyhnZXRDdXJyZW50TG9jYXRpb24oZXZlbnQuc3RhdGUpKTtcbiAgICB9XG5cbiAgICBfRE9NVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcih3aW5kb3csICdwb3BzdGF0ZScsIHBvcFN0YXRlTGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIF9ET01VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKHdpbmRvdywgJ3BvcHN0YXRlJywgcG9wU3RhdGVMaXN0ZW5lcik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaFRyYW5zaXRpb24obG9jYXRpb24pIHtcbiAgICB2YXIgYmFzZW5hbWUgPSBsb2NhdGlvbi5iYXNlbmFtZTtcbiAgICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICB2YXIgc2VhcmNoID0gbG9jYXRpb24uc2VhcmNoO1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcbiAgICB2YXIgc3RhdGUgPSBsb2NhdGlvbi5zdGF0ZTtcbiAgICB2YXIgYWN0aW9uID0gbG9jYXRpb24uYWN0aW9uO1xuICAgIHZhciBrZXkgPSBsb2NhdGlvbi5rZXk7XG5cbiAgICBpZiAoYWN0aW9uID09PSBfQWN0aW9ucy5QT1ApIHJldHVybjsgLy8gTm90aGluZyB0byBkby5cblxuICAgIF9ET01TdGF0ZVN0b3JhZ2Uuc2F2ZVN0YXRlKGtleSwgc3RhdGUpO1xuXG4gICAgdmFyIHBhdGggPSAoYmFzZW5hbWUgfHwgJycpICsgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoO1xuICAgIHZhciBoaXN0b3J5U3RhdGUgPSB7XG4gICAgICBrZXk6IGtleVxuICAgIH07XG5cbiAgICBpZiAoYWN0aW9uID09PSBfQWN0aW9ucy5QVVNIKSB7XG4gICAgICBpZiAodXNlUmVmcmVzaCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHBhdGg7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gUHJldmVudCBsb2NhdGlvbiB1cGRhdGUuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShoaXN0b3J5U3RhdGUsIG51bGwsIHBhdGgpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJFUExBQ0VcbiAgICAgIGlmICh1c2VSZWZyZXNoKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHBhdGgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFByZXZlbnQgbG9jYXRpb24gdXBkYXRlLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoaGlzdG9yeVN0YXRlLCBudWxsLCBwYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBoaXN0b3J5ID0gX2NyZWF0ZURPTUhpc3RvcnkyWydkZWZhdWx0J10oX2V4dGVuZHMoe30sIG9wdGlvbnMsIHtcbiAgICBnZXRDdXJyZW50TG9jYXRpb246IGdldEN1cnJlbnRMb2NhdGlvbixcbiAgICBmaW5pc2hUcmFuc2l0aW9uOiBmaW5pc2hUcmFuc2l0aW9uLFxuICAgIHNhdmVTdGF0ZTogX0RPTVN0YXRlU3RvcmFnZS5zYXZlU3RhdGVcbiAgfSkpO1xuXG4gIHZhciBsaXN0ZW5lckNvdW50ID0gMCxcbiAgICAgIHN0b3BQb3BTdGF0ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIGxpc3RlbkJlZm9yZShsaXN0ZW5lcikge1xuICAgIGlmICgrK2xpc3RlbmVyQ291bnQgPT09IDEpIHN0b3BQb3BTdGF0ZUxpc3RlbmVyID0gc3RhcnRQb3BTdGF0ZUxpc3RlbmVyKGhpc3RvcnkpO1xuXG4gICAgdmFyIHVubGlzdGVuID0gaGlzdG9yeS5saXN0ZW5CZWZvcmUobGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVubGlzdGVuKCk7XG5cbiAgICAgIGlmICgtLWxpc3RlbmVyQ291bnQgPT09IDApIHN0b3BQb3BTdGF0ZUxpc3RlbmVyKCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpc3RlbihsaXN0ZW5lcikge1xuICAgIGlmICgrK2xpc3RlbmVyQ291bnQgPT09IDEpIHN0b3BQb3BTdGF0ZUxpc3RlbmVyID0gc3RhcnRQb3BTdGF0ZUxpc3RlbmVyKGhpc3RvcnkpO1xuXG4gICAgdmFyIHVubGlzdGVuID0gaGlzdG9yeS5saXN0ZW4obGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVubGlzdGVuKCk7XG5cbiAgICAgIGlmICgtLWxpc3RlbmVyQ291bnQgPT09IDApIHN0b3BQb3BTdGF0ZUxpc3RlbmVyKCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIGRlcHJlY2F0ZWRcbiAgZnVuY3Rpb24gcmVnaXN0ZXJUcmFuc2l0aW9uSG9vayhob29rKSB7XG4gICAgaWYgKCsrbGlzdGVuZXJDb3VudCA9PT0gMSkgc3RvcFBvcFN0YXRlTGlzdGVuZXIgPSBzdGFydFBvcFN0YXRlTGlzdGVuZXIoaGlzdG9yeSk7XG5cbiAgICBoaXN0b3J5LnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vayk7XG4gIH1cblxuICAvLyBkZXByZWNhdGVkXG4gIGZ1bmN0aW9uIHVucmVnaXN0ZXJUcmFuc2l0aW9uSG9vayhob29rKSB7XG4gICAgaGlzdG9yeS51bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vayk7XG5cbiAgICBpZiAoLS1saXN0ZW5lckNvdW50ID09PSAwKSBzdG9wUG9wU3RhdGVMaXN0ZW5lcigpO1xuICB9XG5cbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBoaXN0b3J5LCB7XG4gICAgbGlzdGVuQmVmb3JlOiBsaXN0ZW5CZWZvcmUsXG4gICAgbGlzdGVuOiBsaXN0ZW4sXG4gICAgcmVnaXN0ZXJUcmFuc2l0aW9uSG9vazogcmVnaXN0ZXJUcmFuc2l0aW9uSG9vayxcbiAgICB1bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2s6IHVucmVnaXN0ZXJUcmFuc2l0aW9uSG9va1xuICB9KTtcbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gY3JlYXRlQnJvd3Nlckhpc3Rvcnk7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9pbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxudmFyIF9pbnZhcmlhbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW52YXJpYW50KTtcblxudmFyIF9FeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIF9ET01VdGlscyA9IHJlcXVpcmUoJy4vRE9NVXRpbHMnKTtcblxudmFyIF9jcmVhdGVIaXN0b3J5ID0gcmVxdWlyZSgnLi9jcmVhdGVIaXN0b3J5Jyk7XG5cbnZhciBfY3JlYXRlSGlzdG9yeTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVIaXN0b3J5KTtcblxuZnVuY3Rpb24gY3JlYXRlRE9NSGlzdG9yeShvcHRpb25zKSB7XG4gIHZhciBoaXN0b3J5ID0gX2NyZWF0ZUhpc3RvcnkyWydkZWZhdWx0J10oX2V4dGVuZHMoe1xuICAgIGdldFVzZXJDb25maXJtYXRpb246IF9ET01VdGlscy5nZXRVc2VyQ29uZmlybWF0aW9uXG4gIH0sIG9wdGlvbnMsIHtcbiAgICBnbzogX0RPTVV0aWxzLmdvXG4gIH0pKTtcblxuICBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICAhX0V4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfaW52YXJpYW50MlsnZGVmYXVsdCddKGZhbHNlLCAnRE9NIGhpc3RvcnkgbmVlZHMgYSBET00nKSA6IF9pbnZhcmlhbnQyWydkZWZhdWx0J10oZmFsc2UpIDogdW5kZWZpbmVkO1xuXG4gICAgcmV0dXJuIGhpc3RvcnkubGlzdGVuKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgaGlzdG9yeSwge1xuICAgIGxpc3RlbjogbGlzdGVuXG4gIH0pO1xufVxuXG5leHBvcnRzWydkZWZhdWx0J10gPSBjcmVhdGVET01IaXN0b3J5O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiLy9pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJ1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfZGVlcEVxdWFsID0gcmVxdWlyZSgnZGVlcC1lcXVhbCcpO1xuXG52YXIgX2RlZXBFcXVhbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWVwRXF1YWwpO1xuXG52YXIgX0FzeW5jVXRpbHMgPSByZXF1aXJlKCcuL0FzeW5jVXRpbHMnKTtcblxudmFyIF9BY3Rpb25zID0gcmVxdWlyZSgnLi9BY3Rpb25zJyk7XG5cbnZhciBfY3JlYXRlTG9jYXRpb24yID0gcmVxdWlyZSgnLi9jcmVhdGVMb2NhdGlvbicpO1xuXG52YXIgX2NyZWF0ZUxvY2F0aW9uMyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZUxvY2F0aW9uMik7XG5cbnZhciBfcnVuVHJhbnNpdGlvbkhvb2sgPSByZXF1aXJlKCcuL3J1blRyYW5zaXRpb25Ib29rJyk7XG5cbnZhciBfcnVuVHJhbnNpdGlvbkhvb2syID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnVuVHJhbnNpdGlvbkhvb2spO1xuXG52YXIgX3BhcnNlUGF0aCA9IHJlcXVpcmUoJy4vcGFyc2VQYXRoJyk7XG5cbnZhciBfcGFyc2VQYXRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhcnNlUGF0aCk7XG5cbnZhciBfZGVwcmVjYXRlID0gcmVxdWlyZSgnLi9kZXByZWNhdGUnKTtcblxudmFyIF9kZXByZWNhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVwcmVjYXRlKTtcblxuZnVuY3Rpb24gY3JlYXRlUmFuZG9tS2V5KGxlbmd0aCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIGxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGxvY2F0aW9uc0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEucGF0aG5hbWUgPT09IGIucGF0aG5hbWUgJiYgYS5zZWFyY2ggPT09IGIuc2VhcmNoICYmXG4gIC8vYS5hY3Rpb24gPT09IGIuYWN0aW9uICYmIC8vIERpZmZlcmVudCBhY3Rpb24gIT09IGxvY2F0aW9uIGNoYW5nZS5cbiAgYS5rZXkgPT09IGIua2V5ICYmIF9kZWVwRXF1YWwyWydkZWZhdWx0J10oYS5zdGF0ZSwgYi5zdGF0ZSk7XG59XG5cbnZhciBEZWZhdWx0S2V5TGVuZ3RoID0gNjtcblxuZnVuY3Rpb24gY3JlYXRlSGlzdG9yeSgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTtcbiAgdmFyIGdldEN1cnJlbnRMb2NhdGlvbiA9IG9wdGlvbnMuZ2V0Q3VycmVudExvY2F0aW9uO1xuICB2YXIgZmluaXNoVHJhbnNpdGlvbiA9IG9wdGlvbnMuZmluaXNoVHJhbnNpdGlvbjtcbiAgdmFyIHNhdmVTdGF0ZSA9IG9wdGlvbnMuc2F2ZVN0YXRlO1xuICB2YXIgZ28gPSBvcHRpb25zLmdvO1xuICB2YXIga2V5TGVuZ3RoID0gb3B0aW9ucy5rZXlMZW5ndGg7XG4gIHZhciBnZXRVc2VyQ29uZmlybWF0aW9uID0gb3B0aW9ucy5nZXRVc2VyQ29uZmlybWF0aW9uO1xuXG4gIGlmICh0eXBlb2Yga2V5TGVuZ3RoICE9PSAnbnVtYmVyJykga2V5TGVuZ3RoID0gRGVmYXVsdEtleUxlbmd0aDtcblxuICB2YXIgdHJhbnNpdGlvbkhvb2tzID0gW107XG5cbiAgZnVuY3Rpb24gbGlzdGVuQmVmb3JlKGhvb2spIHtcbiAgICB0cmFuc2l0aW9uSG9va3MucHVzaChob29rKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cmFuc2l0aW9uSG9va3MgPSB0cmFuc2l0aW9uSG9va3MuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtICE9PSBob29rO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBhbGxLZXlzID0gW107XG4gIHZhciBjaGFuZ2VMaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGxvY2F0aW9uID0gdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIGdldEN1cnJlbnQoKSB7XG4gICAgaWYgKHBlbmRpbmdMb2NhdGlvbiAmJiBwZW5kaW5nTG9jYXRpb24uYWN0aW9uID09PSBfQWN0aW9ucy5QT1ApIHtcbiAgICAgIHJldHVybiBhbGxLZXlzLmluZGV4T2YocGVuZGluZ0xvY2F0aW9uLmtleSk7XG4gICAgfSBlbHNlIGlmIChsb2NhdGlvbikge1xuICAgICAgcmV0dXJuIGFsbEtleXMuaW5kZXhPZihsb2NhdGlvbi5rZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlTG9jYXRpb24obmV3TG9jYXRpb24pIHtcbiAgICB2YXIgY3VycmVudCA9IGdldEN1cnJlbnQoKTtcblxuICAgIGxvY2F0aW9uID0gbmV3TG9jYXRpb247XG5cbiAgICBpZiAobG9jYXRpb24uYWN0aW9uID09PSBfQWN0aW9ucy5QVVNIKSB7XG4gICAgICBhbGxLZXlzID0gW10uY29uY2F0KGFsbEtleXMuc2xpY2UoMCwgY3VycmVudCArIDEpLCBbbG9jYXRpb24ua2V5XSk7XG4gICAgfSBlbHNlIGlmIChsb2NhdGlvbi5hY3Rpb24gPT09IF9BY3Rpb25zLlJFUExBQ0UpIHtcbiAgICAgIGFsbEtleXNbY3VycmVudF0gPSBsb2NhdGlvbi5rZXk7XG4gICAgfVxuXG4gICAgY2hhbmdlTGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICBsaXN0ZW5lcihsb2NhdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICBjaGFuZ2VMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG5cbiAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgIGxpc3RlbmVyKGxvY2F0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb2NhdGlvbiA9IGdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgYWxsS2V5cyA9IFtfbG9jYXRpb24ua2V5XTtcbiAgICAgIHVwZGF0ZUxvY2F0aW9uKF9sb2NhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZUxpc3RlbmVycyA9IGNoYW5nZUxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0gIT09IGxpc3RlbmVyO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGNhbGxiYWNrKSB7XG4gICAgX0FzeW5jVXRpbHMubG9vcEFzeW5jKHRyYW5zaXRpb25Ib29rcy5sZW5ndGgsIGZ1bmN0aW9uIChpbmRleCwgbmV4dCwgZG9uZSkge1xuICAgICAgX3J1blRyYW5zaXRpb25Ib29rMlsnZGVmYXVsdCddKHRyYW5zaXRpb25Ib29rc1tpbmRleF0sIGxvY2F0aW9uLCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgIGRvbmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgICBpZiAoZ2V0VXNlckNvbmZpcm1hdGlvbiAmJiB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZ2V0VXNlckNvbmZpcm1hdGlvbihtZXNzYWdlLCBmdW5jdGlvbiAob2spIHtcbiAgICAgICAgICBjYWxsYmFjayhvayAhPT0gZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG1lc3NhZ2UgIT09IGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBwZW5kaW5nTG9jYXRpb24gPSB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24gdHJhbnNpdGlvblRvKG5leHRMb2NhdGlvbikge1xuICAgIGlmIChsb2NhdGlvbiAmJiBsb2NhdGlvbnNBcmVFcXVhbChsb2NhdGlvbiwgbmV4dExvY2F0aW9uKSkgcmV0dXJuOyAvLyBOb3RoaW5nIHRvIGRvLlxuXG4gICAgcGVuZGluZ0xvY2F0aW9uID0gbmV4dExvY2F0aW9uO1xuXG4gICAgY29uZmlybVRyYW5zaXRpb25UbyhuZXh0TG9jYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKHBlbmRpbmdMb2NhdGlvbiAhPT0gbmV4dExvY2F0aW9uKSByZXR1cm47IC8vIFRyYW5zaXRpb24gd2FzIGludGVycnVwdGVkLlxuXG4gICAgICBpZiAob2spIHtcbiAgICAgICAgLy8gdHJlYXQgUFVTSCB0byBjdXJyZW50IHBhdGggbGlrZSBSRVBMQUNFIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBicm93c2Vyc1xuICAgICAgICBpZiAobmV4dExvY2F0aW9uLmFjdGlvbiA9PT0gX0FjdGlvbnMuUFVTSCkge1xuICAgICAgICAgIHZhciBwcmV2UGF0aCA9IGNyZWF0ZVBhdGgobG9jYXRpb24pO1xuICAgICAgICAgIHZhciBuZXh0UGF0aCA9IGNyZWF0ZVBhdGgobmV4dExvY2F0aW9uKTtcblxuICAgICAgICAgIGlmIChuZXh0UGF0aCA9PT0gcHJldlBhdGgpIG5leHRMb2NhdGlvbi5hY3Rpb24gPSBfQWN0aW9ucy5SRVBMQUNFO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbmlzaFRyYW5zaXRpb24obmV4dExvY2F0aW9uKSAhPT0gZmFsc2UpIHVwZGF0ZUxvY2F0aW9uKG5leHRMb2NhdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKGxvY2F0aW9uICYmIG5leHRMb2NhdGlvbi5hY3Rpb24gPT09IF9BY3Rpb25zLlBPUCkge1xuICAgICAgICB2YXIgcHJldkluZGV4ID0gYWxsS2V5cy5pbmRleE9mKGxvY2F0aW9uLmtleSk7XG4gICAgICAgIHZhciBuZXh0SW5kZXggPSBhbGxLZXlzLmluZGV4T2YobmV4dExvY2F0aW9uLmtleSk7XG5cbiAgICAgICAgaWYgKHByZXZJbmRleCAhPT0gLTEgJiYgbmV4dEluZGV4ICE9PSAtMSkgZ28ocHJldkluZGV4IC0gbmV4dEluZGV4KTsgLy8gUmVzdG9yZSB0aGUgVVJMLlxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaChsb2NhdGlvbikge1xuICAgIHRyYW5zaXRpb25UbyhjcmVhdGVMb2NhdGlvbihsb2NhdGlvbiwgX0FjdGlvbnMuUFVTSCwgY3JlYXRlS2V5KCkpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2UobG9jYXRpb24pIHtcbiAgICB0cmFuc2l0aW9uVG8oY3JlYXRlTG9jYXRpb24obG9jYXRpb24sIF9BY3Rpb25zLlJFUExBQ0UsIGNyZWF0ZUtleSgpKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgZ28oLTEpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIGdvKDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlS2V5KCkge1xuICAgIHJldHVybiBjcmVhdGVSYW5kb21LZXkoa2V5TGVuZ3RoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhdGgobG9jYXRpb24pIHtcbiAgICBpZiAobG9jYXRpb24gPT0gbnVsbCB8fCB0eXBlb2YgbG9jYXRpb24gPT09ICdzdHJpbmcnKSByZXR1cm4gbG9jYXRpb247XG5cbiAgICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICB2YXIgc2VhcmNoID0gbG9jYXRpb24uc2VhcmNoO1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcblxuICAgIHZhciByZXN1bHQgPSBwYXRobmFtZTtcblxuICAgIGlmIChzZWFyY2gpIHJlc3VsdCArPSBzZWFyY2g7XG5cbiAgICBpZiAoaGFzaCkgcmVzdWx0ICs9IGhhc2g7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSHJlZihsb2NhdGlvbikge1xuICAgIHJldHVybiBjcmVhdGVQYXRoKGxvY2F0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uLCBhY3Rpb24pIHtcbiAgICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8PSAyIHx8IGFyZ3VtZW50c1syXSA9PT0gdW5kZWZpbmVkID8gY3JlYXRlS2V5KCkgOiBhcmd1bWVudHNbMl07XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIC8vd2FybmluZyhcbiAgICAgIC8vICBmYWxzZSxcbiAgICAgIC8vICAnVGhlIHN0YXRlICgybmQpIGFyZ3VtZW50IHRvIGhpc3RvcnkuY3JlYXRlTG9jYXRpb24gaXMgZGVwcmVjYXRlZDsgdXNlIGEgJyArXG4gICAgICAvLyAgJ2xvY2F0aW9uIGRlc2NyaXB0b3IgaW5zdGVhZCdcbiAgICAgIC8vKVxuXG4gICAgICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAnc3RyaW5nJykgbG9jYXRpb24gPSBfcGFyc2VQYXRoMlsnZGVmYXVsdCddKGxvY2F0aW9uKTtcblxuICAgICAgbG9jYXRpb24gPSBfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHsgc3RhdGU6IGFjdGlvbiB9KTtcblxuICAgICAgYWN0aW9uID0ga2V5O1xuICAgICAga2V5ID0gYXJndW1lbnRzWzNdIHx8IGNyZWF0ZUtleSgpO1xuICAgIH1cblxuICAgIHJldHVybiBfY3JlYXRlTG9jYXRpb24zWydkZWZhdWx0J10obG9jYXRpb24sIGFjdGlvbiwga2V5KTtcbiAgfVxuXG4gIC8vIGRlcHJlY2F0ZWRcbiAgZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpIHtcbiAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgIHVwZGF0ZUxvY2F0aW9uU3RhdGUobG9jYXRpb24sIHN0YXRlKTtcbiAgICAgIHVwZGF0ZUxvY2F0aW9uKGxvY2F0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlTG9jYXRpb25TdGF0ZShnZXRDdXJyZW50TG9jYXRpb24oKSwgc3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxvY2F0aW9uU3RhdGUobG9jYXRpb24sIHN0YXRlKSB7XG4gICAgbG9jYXRpb24uc3RhdGUgPSBfZXh0ZW5kcyh7fSwgbG9jYXRpb24uc3RhdGUsIHN0YXRlKTtcbiAgICBzYXZlU3RhdGUobG9jYXRpb24ua2V5LCBsb2NhdGlvbi5zdGF0ZSk7XG4gIH1cblxuICAvLyBkZXByZWNhdGVkXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vaykge1xuICAgIGlmICh0cmFuc2l0aW9uSG9va3MuaW5kZXhPZihob29rKSA9PT0gLTEpIHRyYW5zaXRpb25Ib29rcy5wdXNoKGhvb2spO1xuICB9XG5cbiAgLy8gZGVwcmVjYXRlZFxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vaykge1xuICAgIHRyYW5zaXRpb25Ib29rcyA9IHRyYW5zaXRpb25Ib29rcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtICE9PSBob29rO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gZGVwcmVjYXRlZFxuICBmdW5jdGlvbiBwdXNoU3RhdGUoc3RhdGUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSBwYXRoID0gX3BhcnNlUGF0aDJbJ2RlZmF1bHQnXShwYXRoKTtcblxuICAgIHB1c2goX2V4dGVuZHMoeyBzdGF0ZTogc3RhdGUgfSwgcGF0aCkpO1xuICB9XG5cbiAgLy8gZGVwcmVjYXRlZFxuICBmdW5jdGlvbiByZXBsYWNlU3RhdGUoc3RhdGUsIHBhdGgpIHtcbiAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSBwYXRoID0gX3BhcnNlUGF0aDJbJ2RlZmF1bHQnXShwYXRoKTtcblxuICAgIHJlcGxhY2UoX2V4dGVuZHMoeyBzdGF0ZTogc3RhdGUgfSwgcGF0aCkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsaXN0ZW5CZWZvcmU6IGxpc3RlbkJlZm9yZSxcbiAgICBsaXN0ZW46IGxpc3RlbixcbiAgICB0cmFuc2l0aW9uVG86IHRyYW5zaXRpb25UbyxcbiAgICBwdXNoOiBwdXNoLFxuICAgIHJlcGxhY2U6IHJlcGxhY2UsXG4gICAgZ286IGdvLFxuICAgIGdvQmFjazogZ29CYWNrLFxuICAgIGdvRm9yd2FyZDogZ29Gb3J3YXJkLFxuICAgIGNyZWF0ZUtleTogY3JlYXRlS2V5LFxuICAgIGNyZWF0ZVBhdGg6IGNyZWF0ZVBhdGgsXG4gICAgY3JlYXRlSHJlZjogY3JlYXRlSHJlZixcbiAgICBjcmVhdGVMb2NhdGlvbjogY3JlYXRlTG9jYXRpb24sXG5cbiAgICBzZXRTdGF0ZTogX2RlcHJlY2F0ZTJbJ2RlZmF1bHQnXShzZXRTdGF0ZSwgJ3NldFN0YXRlIGlzIGRlcHJlY2F0ZWQ7IHVzZSBsb2NhdGlvbi5rZXkgdG8gc2F2ZSBzdGF0ZSBpbnN0ZWFkJyksXG4gICAgcmVnaXN0ZXJUcmFuc2l0aW9uSG9vazogX2RlcHJlY2F0ZTJbJ2RlZmF1bHQnXShyZWdpc3RlclRyYW5zaXRpb25Ib29rLCAncmVnaXN0ZXJUcmFuc2l0aW9uSG9vayBpcyBkZXByZWNhdGVkOyB1c2UgbGlzdGVuQmVmb3JlIGluc3RlYWQnKSxcbiAgICB1bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2s6IF9kZXByZWNhdGUyWydkZWZhdWx0J10odW5yZWdpc3RlclRyYW5zaXRpb25Ib29rLCAndW5yZWdpc3RlclRyYW5zaXRpb25Ib29rIGlzIGRlcHJlY2F0ZWQ7IHVzZSB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgZnJvbSBsaXN0ZW5CZWZvcmUgaW5zdGVhZCcpLFxuICAgIHB1c2hTdGF0ZTogX2RlcHJlY2F0ZTJbJ2RlZmF1bHQnXShwdXNoU3RhdGUsICdwdXNoU3RhdGUgaXMgZGVwcmVjYXRlZDsgdXNlIHB1c2ggaW5zdGVhZCcpLFxuICAgIHJlcGxhY2VTdGF0ZTogX2RlcHJlY2F0ZTJbJ2RlZmF1bHQnXShyZXBsYWNlU3RhdGUsICdyZXBsYWNlU3RhdGUgaXMgZGVwcmVjYXRlZDsgdXNlIHJlcGxhY2UgaW5zdGVhZCcpXG4gIH07XG59XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGNyZWF0ZUhpc3Rvcnk7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIvL2ltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9BY3Rpb25zID0gcmVxdWlyZSgnLi9BY3Rpb25zJyk7XG5cbnZhciBfcGFyc2VQYXRoID0gcmVxdWlyZSgnLi9wYXJzZVBhdGgnKTtcblxudmFyIF9wYXJzZVBhdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGFyc2VQYXRoKTtcblxuZnVuY3Rpb24gY3JlYXRlTG9jYXRpb24oKSB7XG4gIHZhciBsb2NhdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/ICcvJyA6IGFyZ3VtZW50c1swXTtcbiAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IF9BY3Rpb25zLlBPUCA6IGFyZ3VtZW50c1sxXTtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IG51bGwgOiBhcmd1bWVudHNbMl07XG5cbiAgdmFyIF9mb3VydGhBcmcgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyBudWxsIDogYXJndW1lbnRzWzNdO1xuXG4gIGlmICh0eXBlb2YgbG9jYXRpb24gPT09ICdzdHJpbmcnKSBsb2NhdGlvbiA9IF9wYXJzZVBhdGgyWydkZWZhdWx0J10obG9jYXRpb24pO1xuXG4gIGlmICh0eXBlb2YgYWN0aW9uID09PSAnb2JqZWN0Jykge1xuICAgIC8vd2FybmluZyhcbiAgICAvLyAgZmFsc2UsXG4gICAgLy8gICdUaGUgc3RhdGUgKDJuZCkgYXJndW1lbnQgdG8gY3JlYXRlTG9jYXRpb24gaXMgZGVwcmVjYXRlZDsgdXNlIGEgJyArXG4gICAgLy8gICdsb2NhdGlvbiBkZXNjcmlwdG9yIGluc3RlYWQnXG4gICAgLy8pXG5cbiAgICBsb2NhdGlvbiA9IF9leHRlbmRzKHt9LCBsb2NhdGlvbiwgeyBzdGF0ZTogYWN0aW9uIH0pO1xuXG4gICAgYWN0aW9uID0ga2V5IHx8IF9BY3Rpb25zLlBPUDtcbiAgICBrZXkgPSBfZm91cnRoQXJnO1xuICB9XG5cbiAgdmFyIHBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUgfHwgJy8nO1xuICB2YXIgc2VhcmNoID0gbG9jYXRpb24uc2VhcmNoIHx8ICcnO1xuICB2YXIgaGFzaCA9IGxvY2F0aW9uLmhhc2ggfHwgJyc7XG4gIHZhciBzdGF0ZSA9IGxvY2F0aW9uLnN0YXRlIHx8IG51bGw7XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgc2VhcmNoOiBzZWFyY2gsXG4gICAgaGFzaDogaGFzaCxcbiAgICBzdGF0ZTogc3RhdGUsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAga2V5OiBrZXlcbiAgfTtcbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gY3JlYXRlTG9jYXRpb247XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIvL2ltcG9ydCB3YXJuaW5nIGZyb20gJ3dhcm5pbmcnXG5cblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZnVuY3Rpb24gZGVwcmVjYXRlKGZuKSB7XG4gIHJldHVybiBmbjtcbiAgLy9yZXR1cm4gZnVuY3Rpb24gKCkge1xuICAvLyAgd2FybmluZyhmYWxzZSwgJ1toaXN0b3J5XSAnICsgbWVzc2FnZSlcbiAgLy8gIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIC8vfVxufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGRlcHJlY2F0ZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5mdW5jdGlvbiBleHRyYWN0UGF0aChzdHJpbmcpIHtcbiAgdmFyIG1hdGNoID0gc3RyaW5nLm1hdGNoKC9eaHR0cHM/OlxcL1xcL1teXFwvXSovKTtcblxuICBpZiAobWF0Y2ggPT0gbnVsbCkgcmV0dXJuIHN0cmluZztcblxuICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGV4dHJhY3RQYXRoO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTsiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF93YXJuaW5nID0gcmVxdWlyZSgnd2FybmluZycpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbnZhciBfZXh0cmFjdFBhdGggPSByZXF1aXJlKCcuL2V4dHJhY3RQYXRoJyk7XG5cbnZhciBfZXh0cmFjdFBhdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXh0cmFjdFBhdGgpO1xuXG5mdW5jdGlvbiBwYXJzZVBhdGgocGF0aCkge1xuICB2YXIgcGF0aG5hbWUgPSBfZXh0cmFjdFBhdGgyWydkZWZhdWx0J10ocGF0aCk7XG4gIHZhciBzZWFyY2ggPSAnJztcbiAgdmFyIGhhc2ggPSAnJztcblxuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX3dhcm5pbmcyWydkZWZhdWx0J10ocGF0aCA9PT0gcGF0aG5hbWUsICdBIHBhdGggbXVzdCBiZSBwYXRobmFtZSArIHNlYXJjaCArIGhhc2ggb25seSwgbm90IGEgZnVsbHkgcXVhbGlmaWVkIFVSTCBsaWtlIFwiJXNcIicsIHBhdGgpIDogdW5kZWZpbmVkO1xuXG4gIHZhciBoYXNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoSW5kZXggIT09IC0xKSB7XG4gICAgaGFzaCA9IHBhdGhuYW1lLnN1YnN0cmluZyhoYXNoSW5kZXgpO1xuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyaW5nKDAsIGhhc2hJbmRleCk7XG4gIH1cblxuICB2YXIgc2VhcmNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKCc/Jyk7XG4gIGlmIChzZWFyY2hJbmRleCAhPT0gLTEpIHtcbiAgICBzZWFyY2ggPSBwYXRobmFtZS5zdWJzdHJpbmcoc2VhcmNoSW5kZXgpO1xuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyaW5nKDAsIHNlYXJjaEluZGV4KTtcbiAgfVxuXG4gIGlmIChwYXRobmFtZSA9PT0gJycpIHBhdGhuYW1lID0gJy8nO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgIHNlYXJjaDogc2VhcmNoLFxuICAgIGhhc2g6IGhhc2hcbiAgfTtcbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gcGFyc2VQYXRoO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoJ3dhcm5pbmcnKTtcblxudmFyIF93YXJuaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dhcm5pbmcpO1xuXG5mdW5jdGlvbiBydW5UcmFuc2l0aW9uSG9vayhob29rLCBsb2NhdGlvbiwgY2FsbGJhY2spIHtcbiAgdmFyIHJlc3VsdCA9IGhvb2sobG9jYXRpb24sIGNhbGxiYWNrKTtcblxuICBpZiAoaG9vay5sZW5ndGggPCAyKSB7XG4gICAgLy8gQXNzdW1lIHRoZSBob29rIHJ1bnMgc3luY2hyb25vdXNseSBhbmQgYXV0b21hdGljYWxseVxuICAgIC8vIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHJldHVybiB2YWx1ZS5cbiAgICBjYWxsYmFjayhyZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfd2FybmluZzJbJ2RlZmF1bHQnXShyZXN1bHQgPT09IHVuZGVmaW5lZCwgJ1lvdSBzaG91bGQgbm90IFwicmV0dXJuXCIgaW4gYSB0cmFuc2l0aW9uIGhvb2sgd2l0aCBhIGNhbGxiYWNrIGFyZ3VtZW50OyBjYWxsIHRoZSBjYWxsYmFjayBpbnN0ZWFkJykgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gcnVuVHJhbnNpdGlvbkhvb2s7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICtcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXG4gICAgICApO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgd2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHdhcm5pbmcgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYXJncykge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFyZ3MgPSBuZXcgQXJyYXkobGVuID4gMiA/IGxlbiAtIDIgOiAwKTtcbiAgICBmb3IgKHZhciBrZXkgPSAyOyBrZXkgPCBsZW47IGtleSsrKSB7XG4gICAgICBhcmdzW2tleSAtIDJdID0gYXJndW1lbnRzW2tleV07XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArXG4gICAgICAgICdtZXNzYWdlIGFyZ3VtZW50J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0Lmxlbmd0aCA8IDEwIHx8ICgvXltzXFxXXSokLykudGVzdChmb3JtYXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUaGUgd2FybmluZyBmb3JtYXQgc2hvdWxkIGJlIGFibGUgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyAnICtcbiAgICAgICAgJ3dhcm5pbmcuIFBsZWFzZSwgdXNlIGEgbW9yZSBkZXNjcmlwdGl2ZSBmb3JtYXQgdGhhbjogJyArIGZvcm1hdFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgK1xuICAgICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICAgIH0pO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGNhdGNoKHgpIHt9XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlZnJlc2goKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICB9XG5cbiAgZ2V0TWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zaWduZWRJbikge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKFxuICAgICAgICBnZXR0ZXh0KFwiWW91IGhhdmUgc2lnbmVkIGluIGFzICUodXNlcm5hbWUpcy4gUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYmVmb3JlIGNvbnRpbnVpbmcuXCIpLFxuICAgICAgICB7dXNlcm5hbWU6IHRoaXMucHJvcHMuc2lnbmVkSW4udXNlcm5hbWV9LCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc2lnbmVkT3V0KSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoXG4gICAgICAgIGdldHRleHQoXCIlKHVzZXJuYW1lKXMsIHlvdSBoYXZlIGJlZW4gc2lnbmVkIG91dC4gUGxlYXNlIHJlZnJlc2ggdGhlIHBhZ2UgYmVmb3JlIGNvbnRpbnVpbmcuXCIpLFxuICAgICAgICB7dXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZX0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zaWduZWRJbiB8fCB0aGlzLnByb3BzLnNpZ25lZE91dCkge1xuICAgICAgcmV0dXJuIFwiYXV0aC1tZXNzYWdlIHNob3dcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiYXV0aC1tZXNzYWdlXCI7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPnt0aGlzLmdldE1lc3NhZ2UoKX08L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnJlZnJlc2h9PlxuICAgICAgICAgICAge2dldHRleHQoXCJSZWxvYWQgcGFnZVwiKX1cbiAgICAgICAgICA8L2J1dHRvbj4gPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuLXhzIGhpZGRlbi1zbSB0ZXh0LW11dGVkXCI+XG4gICAgICAgICAgICB7Z2V0dGV4dChcIm9yIHByZXNzIEY1IGtleS5cIil9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgdXNlcjogc3RhdGUuYXV0aC51c2VyLFxuICAgIHNpZ25lZEluOiBzdGF0ZS5hdXRoLnNpZ25lZEluLFxuICAgIHNpZ25lZE91dDogc3RhdGUuYXV0aC5zaWduZWRPdXRcbiAgfTtcbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBCQVNFX1VSTCA9ICQoJ2Jhc2UnKS5hdHRyKCdocmVmJykgKyAndXNlci1hdmF0YXIvJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRTcmMoKSB7XG4gICAgbGV0IHNpemUgPSB0aGlzLnByb3BzLnNpemUgfHwgMTAwOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbiAgICBsZXQgdXJsID0gQkFTRV9VUkw7XG5cbiAgICBpZiAodGhpcy5wcm9wcy51c2VyICYmIHRoaXMucHJvcHMudXNlci5pZCkge1xuICAgICAgLy8ganVzdCBhdmF0YXIgaGFzaCwgc2l6ZSBhbmQgdXNlciBpZFxuICAgICAgdXJsICs9IHRoaXMucHJvcHMudXNlci5hdmF0YXJfaGFzaCArICcvJyArIHNpemUgKyAnLycgKyB0aGlzLnByb3BzLnVzZXIuaWQgKyAnLnBuZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGp1c3QgYXBwZW5kIGF2YXRhciBzaXplIHRvIGZpbGUgdG8gcHJvZHVjZSBuby1hdmF0YXIgcGxhY2Vob2xkZXJcbiAgICAgIHVybCArPSBzaXplICsgJy5wbmcnO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8aW1nIHNyYz17dGhpcy5nZXRTcmMoKX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8ICd1c2VyLWF2YXRhcid9XG4gICAgICAgICAgICAgICAgdGl0bGU9e2dldHRleHQoXCJVc2VyIGF2YXRhclwiKX0vPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldFJlYXNvbk1lc3NhZ2UoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGlmICh0aGlzLnByb3BzLm1lc3NhZ2UuaHRtbCkge1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibGVhZFwiXG4gICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e19faHRtbDogdGhpcy5wcm9wcy5tZXNzYWdlLmh0bWx9fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxwIGNsYXNzTmFtZT1cImxlYWRcIj57dGhpcy5wcm9wcy5tZXNzYWdlLnBsYWlufTwvcD47XG4gICAgfVxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRFeHBpcmF0aW9uTWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5leHBpcmVzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5leHBpcmVzLmlzQWZ0ZXIobW9tZW50KCkpKSB7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShcbiAgICAgICAgICBnZXR0ZXh0KFwiVGhpcyBiYW4gZXhwaXJlcyAlKGV4cGlyZXNfb24pcy5cIiksXG4gICAgICAgICAgeydleHBpcmVzX29uJzogdGhpcy5wcm9wcy5leHBpcmVzLmZyb21Ob3coKX0sXG4gICAgICAgICAgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0dGV4dChcIlRoaXMgYmFuIGhhcyBleHBpcmVkLlwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJUaGlzIGJhbiBpcyBwZXJtYW5lbnQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFnZSBwYWdlLWVycm9yIHBhZ2UtZXJyb3ItYmFubmVkXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtcGFuZWxcIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+aGlnaGxpZ2h0X29mZjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICAgICAge3RoaXMuZ2V0UmVhc29uTWVzc2FnZSgpfVxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibWVzc2FnZS1mb290bm90ZVwiPlxuICAgICAgICAgICAgICB7dGhpcy5nZXRFeHBpcmF0aW9uTWVzc2FnZSgpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGxldCBjbGFzc05hbWUgPSAnYnRuICcgKyB0aGlzLnByb3BzLmNsYXNzTmFtZTtcbiAgICBsZXQgZGlzYWJsZWQgPSB0aGlzLnByb3BzLmRpc2FibGVkO1xuXG4gICAgaWYgKHRoaXMucHJvcHMubG9hZGluZykge1xuICAgICAgY2xhc3NOYW1lICs9ICcgYnRuLWxvYWRpbmcnO1xuICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGJ1dHRvbiB0eXBlPXt0aGlzLnByb3BzLm9uQ2xpY2sgPyAnYnV0dG9uJyA6ICdzdWJtaXQnfVxuICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLm9uQ2xpY2t9PlxuICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICB7dGhpcy5wcm9wcy5sb2FkaW5nID8gPExvYWRlciAvPiA6IG51bGx9XG4gICAgPC9idXR0b24+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuXG5CdXR0b24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWU6IFwiYnRuLWRlZmF1bHRcIixcblxuICB0eXBlOiBcInN1Ym1pdFwiLFxuXG4gIGxvYWRpbmc6IGZhbHNlLFxuICBkaXNhYmxlZDogZmFsc2UsXG5cbiAgb25DbGljazogbnVsbFxufTtcbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmNvbnN0IEJBU0VfVVJMID0gJCgnYmFzZScpLmF0dHIoJ2hyZWYnKSArICd1c2VyLWF2YXRhcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGdldEF2YXRhclNpemUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudXBsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmNyb3BfdG1wLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLm9wdGlvbnMuY3JvcF9vcmcuc2l6ZTtcbiAgICB9XG4gIH1cblxuICBnZXRBdmF0YXJTZWNyZXQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudXBsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmNyb3BfdG1wLnNlY3JldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5jcm9wX29yZy5zZWNyZXQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXZhdGFySGFzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy51cGxvYWQgfHwgdGhpcy5wcm9wcy51c2VyLmF2YXRhcl9oYXNoO1xuICB9XG5cbiAgZ2V0SW1hZ2VQYXRoKCkge1xuICAgIHJldHVybiBbXG4gICAgICBCQVNFX1VSTCxcbiAgICAgIHRoaXMuZ2V0QXZhdGFyU2VjcmV0KCkgKyAnOicgKyB0aGlzLmdldEF2YXRhckhhc2goKSxcbiAgICAgIHRoaXMucHJvcHMudXNlci5pZCArICcucG5nJ1xuICAgIF0uam9pbignLycpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgbGV0IGNyb3BpdCA9ICQoJy5jcm9wLWZvcm0nKTtcbiAgICBjcm9waXQud2lkdGgodGhpcy5nZXRBdmF0YXJTaXplKCkpO1xuXG4gICAgY3JvcGl0LmNyb3BpdCh7XG4gICAgICAnd2lkdGgnOiB0aGlzLmdldEF2YXRhclNpemUoKSxcbiAgICAgICdoZWlnaHQnOiB0aGlzLmdldEF2YXRhclNpemUoKSxcbiAgICAgICdpbWFnZVN0YXRlJzoge1xuICAgICAgICAnc3JjJzogdGhpcy5nZXRJbWFnZVBhdGgoKVxuICAgICAgfSxcbiAgICAgIG9uSW1hZ2VMb2FkZWQ6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudXBsb2FkKSB7XG4gICAgICAgICAgLy8gY2VudGVyIHVwbG9hZGVkIGltYWdlXG4gICAgICAgICAgbGV0IHpvb21MZXZlbCA9IGNyb3BpdC5jcm9waXQoJ3pvb20nKTtcbiAgICAgICAgICBsZXQgaW1hZ2VTaXplID0gY3JvcGl0LmNyb3BpdCgnaW1hZ2VTaXplJyk7XG5cbiAgICAgICAgICAvLyBpcyBpdCB3aWRlciB0aGFuIHRhbGxlcj9cbiAgICAgICAgICBpZiAoaW1hZ2VTaXplLndpZHRoID4gaW1hZ2VTaXplLmhlaWdodCkge1xuICAgICAgICAgICAgbGV0IGRpc3BsYXllZFdpZHRoID0gKGltYWdlU2l6ZS53aWR0aCAqIHpvb21MZXZlbCk7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0WCA9IChkaXNwbGF5ZWRXaWR0aCAtIHRoaXMuZ2V0QXZhdGFyU2l6ZSgpKSAvIC0yO1xuXG4gICAgICAgICAgICBjcm9waXQuY3JvcGl0KCdvZmZzZXQnLCB7XG4gICAgICAgICAgICAgICd4Jzogb2Zmc2V0WCxcbiAgICAgICAgICAgICAgJ3knOiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlU2l6ZS53aWR0aCA8IGltYWdlU2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgICAgIGxldCBkaXNwbGF5ZWRIZWlnaHQgPSAoaW1hZ2VTaXplLmhlaWdodCAqIHpvb21MZXZlbCk7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0WSA9IChkaXNwbGF5ZWRIZWlnaHQgLSB0aGlzLmdldEF2YXRhclNpemUoKSkgLyAtMjtcblxuICAgICAgICAgICAgY3JvcGl0LmNyb3BpdCgnb2Zmc2V0Jywge1xuICAgICAgICAgICAgICAneCc6IDAsXG4gICAgICAgICAgICAgICd5Jzogb2Zmc2V0WVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVzZSBwcmVzZXJ2ZWQgY3JvcFxuICAgICAgICAgIGxldCBjcm9wID0gdGhpcy5wcm9wcy5vcHRpb25zLmNyb3Bfb3JnLmNyb3A7XG4gICAgICAgICAgaWYgKGNyb3ApIHtcbiAgICAgICAgICAgIGNyb3BpdC5jcm9waXQoJ3pvb20nLCBjcm9wLnpvb20pO1xuICAgICAgICAgICAgY3JvcGl0LmNyb3BpdCgnb2Zmc2V0Jywge1xuICAgICAgICAgICAgICAneCc6IGNyb3AueCxcbiAgICAgICAgICAgICAgJ3knOiBjcm9wLnlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgJCgnLmNyb3AtZm9ybScpLmNyb3BpdCgnZGlzYWJsZScpO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjcm9wQXZhdGFyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2lzTG9hZGluZyc6IHRydWVcbiAgICB9KTtcblxuICAgIGxldCBhdmF0YXJUeXBlID0gdGhpcy5wcm9wcy51cGxvYWQgPyAnY3JvcF90bXAnIDogJ2Nyb3Bfb3JnJztcbiAgICBsZXQgY3JvcGl0ID0gJCgnLmNyb3AtZm9ybScpO1xuXG4gICAgYWpheC5wb3N0KHRoaXMucHJvcHMudXNlci5hcGlfdXJsLmF2YXRhciwge1xuICAgICAgJ2F2YXRhcic6IGF2YXRhclR5cGUsXG4gICAgICAnY3JvcCc6IHtcbiAgICAgICAgJ29mZnNldCc6IGNyb3BpdC5jcm9waXQoJ29mZnNldCcpLFxuICAgICAgICAnem9vbSc6IGNyb3BpdC5jcm9waXQoJ3pvb20nKVxuICAgICAgfVxuICAgIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25Db21wbGV0ZShkYXRhLmF2YXRhcl9oYXNoLCBkYXRhLm9wdGlvbnMpO1xuICAgICAgc25hY2tiYXIuc3VjY2VzcyhkYXRhLmRldGFpbCk7XG4gICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zaG93RXJyb3IocmVqZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5IG1vZGFsLWF2YXRhci1jcm9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY3JvcC1mb3JtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjcm9waXQtaW1hZ2UtcHJldmlld1wiPjwvZGl2PlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBjbGFzc05hbWU9XCJjcm9waXQtaW1hZ2Utem9vbS1pbnB1dFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02IGNvbC1tZC1vZmZzZXQtM1wiPlxuXG4gICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLmNyb3BBdmF0YXJ9XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAge3RoaXMucHJvcHMudXBsb2FkID8gZ2V0dGV4dChcIlNldCBhdmF0YXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldHRleHQoXCJDcm9wIGltYWdlXCIpfVxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLnNob3dJbmRleH1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAge2dldHRleHQoXCJDYW5jZWxcIil9XG4gICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYmF0Y2ggZnJvbSAnbWlzYWdvL3V0aWxzL2JhdGNoJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBHYWxsZXJ5SXRlbSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2VsZWN0ID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2VsZWN0KHRoaXMucHJvcHMuaW1hZ2UpO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3Rpb24gPT09IHRoaXMucHJvcHMuaW1hZ2UpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiAnYnRuIGJ0bi1hdmF0YXIgYnRuLWRpc2FibGVkIGF2YXRhci1zZWxlY3RlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ2J0biBidG4tYXZhdGFyIGF2YXRhci1zZWxlY3RlZCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gJ2J0biBidG4tYXZhdGFyIGJ0bi1kaXNhYmxlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnYnRuIGJ0bi1hdmF0YXInO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnByb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuc2VsZWN0fT5cbiAgICAgIDxpbWcgc3JjPXttaXNhZ28uZ2V0KCdNRURJQV9VUkwnKSArIHRoaXMucHJvcHMuaW1hZ2V9IC8+XG4gICAgPC9idXR0b24+XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2FsbGVyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYXZhdGFycy1nYWxsZXJ5XCI+XG4gICAgICA8aDM+e3RoaXMucHJvcHMubmFtZX08L2gzPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImF2YXRhcnMtZ2FsbGVyeS1pbWFnZXNcIj5cbiAgICAgICAge2JhdGNoKHRoaXMucHJvcHMuaW1hZ2VzLCA0LCBudWxsKS5tYXAoKHJvdywgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiIGtleT17aX0+XG4gICAgICAgICAgICB7cm93Lm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb2wteHMtM1wiIGtleT17aX0+XG4gICAgICAgICAgICAgICAge2l0ZW0gPyA8R2FsbGVyeUl0ZW0gaW1hZ2U9e2l0ZW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0PXt0aGlzLnByb3BzLnNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb249e3RoaXMucHJvcHMuc2VsZWN0aW9ufSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDogPGRpdiBjbGFzc05hbWU9XCJibGFuay1hdmF0YXJcIiAvPn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdzZWxlY3Rpb24nOiBudWxsLFxuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2VsZWN0ID0gKGltYWdlKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3Rpb246IGltYWdlXG4gICAgfSk7XG4gIH07XG5cbiAgc2F2ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdpc0xvYWRpbmcnOiB0cnVlXG4gICAgfSk7XG5cbiAgICBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuYXZhdGFyLCB7XG4gICAgICBhdmF0YXI6ICdnYWxsZXJpZXMnLFxuICAgICAgaW1hZ2U6IHRoaXMuc3RhdGUuc2VsZWN0aW9uXG4gICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnaXNMb2FkaW5nJzogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBzbmFja2Jhci5zdWNjZXNzKHJlc3BvbnNlLmRldGFpbCk7XG4gICAgICB0aGlzLnByb3BzLm9uQ29tcGxldGUocmVzcG9uc2UuYXZhdGFyX2hhc2gsIHJlc3BvbnNlLm9wdGlvbnMpO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2hvd0Vycm9yKHJlamVjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1hdmF0YXItZ2FsbGVyeVwiPlxuXG4gICAgICAgIHt0aGlzLnByb3BzLm9wdGlvbnMuZ2FsbGVyaWVzLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8R2FsbGVyeSBuYW1lPXtpdGVtLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcz17aXRlbS5pbWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbj17dGhpcy5zdGF0ZS5zZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0PXt0aGlzLnNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpfSAvPjtcbiAgICAgICAgfSl9XG5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02IGNvbC1tZC1vZmZzZXQtM1wiPlxuXG4gICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2F2ZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5zdGF0ZS5zZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5zZWxlY3Rpb24gPyBnZXR0ZXh0KFwiU2F2ZSBjaG9pY2VcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0dGV4dChcIlNlbGVjdCBhdmF0YXJcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLnNob3dJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4tZGVmYXVsdCBidG4tYmxvY2tcIj5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJDYW5jZWxcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBdmF0YXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYXZhdGFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpc0xvYWRpbmcnOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYWxsQXBpKGF2YXRhclR5cGUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdpc0xvYWRpbmcnOiB0cnVlXG4gICAgfSk7XG5cbiAgICBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuYXZhdGFyLCB7XG4gICAgICBhdmF0YXI6IGF2YXRhclR5cGVcbiAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHNuYWNrYmFyLnN1Y2Nlc3MocmVzcG9uc2UuZGV0YWlsKTtcbiAgICAgIHRoaXMucHJvcHMub25Db21wbGV0ZShyZXNwb25zZS5hdmF0YXJfaGFzaCwgcmVzcG9uc2Uub3B0aW9ucyk7XG4gICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zaG93RXJyb3IocmVqZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2V0R3JhdmF0YXIgPSAoKSA9PiB7XG4gICAgdGhpcy5jYWxsQXBpKCdncmF2YXRhcicpO1xuICB9O1xuXG4gIHNldEdlbmVyYXRlZCA9ICgpID0+IHtcbiAgICB0aGlzLmNhbGxBcGkoJ2dlbmVyYXRlZCcpO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldEdyYXZhdGFyQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuZ3JhdmF0YXIpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8QnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2V0R3JhdmF0YXJ9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGJ0bi1hdmF0YXItZ3JhdmF0YXJcIj5cbiAgICAgICAge2dldHRleHQoXCJEb3dubG9hZCBteSBHcmF2YXRhclwiKX1cbiAgICAgIDwvQnV0dG9uPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldENyb3BCdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5jcm9wX29yZykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxCdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5zaG93Q3JvcH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4tZGVmYXVsdCBidG4tYmxvY2sgYnRuLWF2YXRhci1jcm9wXCI+XG4gICAgICAgIHtnZXR0ZXh0KFwiUmUtY3JvcCB1cGxvYWRlZCBpbWFnZVwiKX1cbiAgICAgIDwvQnV0dG9uPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldFVwbG9hZEJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLnVwbG9hZCkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxCdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5zaG93VXBsb2FkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1kZWZhdWx0IGJ0bi1ibG9jayBidG4tYXZhdGFyLXVwbG9hZFwiPlxuICAgICAgICB7Z2V0dGV4dChcIlVwbG9hZCBuZXcgaW1hZ2VcIil9XG4gICAgICA8L0J1dHRvbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRHYWxsZXJ5QnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuZ2FsbGVyaWVzKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLnNob3dHYWxsZXJ5fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1kZWZhdWx0IGJ0bi1ibG9jayBidG4tYXZhdGFyLWdhbGxlcnlcIj5cbiAgICAgICAge2dldHRleHQoXCJQaWNrIGF2YXRhciBmcm9tIGdhbGxlcnlcIil9XG4gICAgICA8L0J1dHRvbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRBdmF0YXJQcmV2aWV3KCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmlzTG9hZGluZykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYXZhdGFyLXByZXZpZXcgcHJldmlldy1sb2FkaW5nXCI+XG4gICAgICAgIDxBdmF0YXIgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzaXplPVwiMjAwXCIgLz5cbiAgICAgICAgPExvYWRlciAvPlxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYXZhdGFyLXByZXZpZXdcIj5cbiAgICAgICAgPEF2YXRhciB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IHNpemU9XCIyMDBcIiAvPlxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHkgbW9kYWwtYXZhdGFyLWluZGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC01XCI+XG5cbiAgICAgICAgICB7dGhpcy5nZXRBdmF0YXJQcmV2aWV3KCl9XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTdcIj5cblxuICAgICAgICAgIHt0aGlzLmdldEdyYXZhdGFyQnV0dG9uKCl9XG5cbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2V0R2VuZXJhdGVkfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGJ0bi1hdmF0YXItZ2VuZXJhdGVcIj5cbiAgICAgICAgICAgIHtnZXR0ZXh0KFwiR2VuZXJhdGUgbXkgaW5kaXZpZHVhbCBhdmF0YXJcIil9XG4gICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICB7dGhpcy5nZXRDcm9wQnV0dG9uKCl9XG4gICAgICAgICAge3RoaXMuZ2V0VXBsb2FkQnV0dG9uKCl9XG4gICAgICAgICAge3RoaXMuZ2V0R2FsbGVyeUJ1dHRvbigpfVxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF2YXRhckluZGV4IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvaW5kZXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBBdmF0YXJDcm9wIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvY3JvcCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEF2YXRhclVwbG9hZCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL3VwbG9hZCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEF2YXRhckdhbGxlcnkgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9nYWxsZXJ5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgTG9hZGVyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL21vZGFsLWxvYWRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHsgdXBkYXRlQXZhdGFyIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3VzZXJzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VBdmF0YXJFcnJvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEVycm9yUmVhc29uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlYXNvbikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxwIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiB0aGlzLnByb3BzLnJlYXNvbn19IC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgcmVtb3ZlX2NpcmNsZV9vdXRsaW5lXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWJvZHlcIj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgIHt0aGlzLnByb3BzLm1lc3NhZ2V9XG4gICAgICAgIDwvcD5cbiAgICAgICAge3RoaXMuZ2V0RXJyb3JSZWFzb24oKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgYWpheC5nZXQodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuYXZhdGFyKS50aGVuKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgJ2NvbXBvbmVudCc6IEF2YXRhckluZGV4LFxuICAgICAgICAnb3B0aW9ucyc6IG9wdGlvbnMsXG4gICAgICAgICdlcnJvcic6IG51bGxcbiAgICAgIH0pO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKHJlamVjdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHNob3dFcnJvciA9IChlcnJvcikgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZXJyb3JcbiAgICB9KTtcbiAgfTtcblxuICBzaG93SW5kZXggPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAnY29tcG9uZW50JzogQXZhdGFySW5kZXhcbiAgICB9KTtcbiAgfTtcblxuICBzaG93VXBsb2FkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2NvbXBvbmVudCc6IEF2YXRhclVwbG9hZFxuICAgIH0pO1xuICB9O1xuXG4gIHNob3dDcm9wID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2NvbXBvbmVudCc6IEF2YXRhckNyb3BcbiAgICB9KTtcbiAgfTtcblxuICBzaG93R2FsbGVyeSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdjb21wb25lbnQnOiBBdmF0YXJHYWxsZXJ5XG4gICAgfSk7XG4gIH07XG5cbiAgY29tcGxldGVGbG93ID0gKGF2YXRhckhhc2gsIG9wdGlvbnMpID0+IHtcbiAgICBzdG9yZS5kaXNwYXRjaCh1cGRhdGVBdmF0YXIodGhpcy5wcm9wcy51c2VyLCBhdmF0YXJIYXNoKSk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdjb21wb25lbnQnOiBBdmF0YXJJbmRleCxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBnZXRCb2R5KCkge1xuICAgIGlmICh0aGlzLnN0YXRlKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8Q2hhbmdlQXZhdGFyRXJyb3IgbWVzc2FnZT17dGhpcy5zdGF0ZS5lcnJvci5kZXRhaWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uPXt0aGlzLnN0YXRlLmVycm9yLnJlYXNvbn0gLz47XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8dGhpcy5zdGF0ZS5jb21wb25lbnQgb3B0aW9ucz17dGhpcy5zdGF0ZS5vcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3RoaXMucHJvcHMudXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlPXt0aGlzLmNvbXBsZXRlRmxvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93RXJyb3I9e3RoaXMuc2hvd0Vycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJbmRleD17dGhpcy5zaG93SW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Nyb3A9e3RoaXMuc2hvd0Nyb3B9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1VwbG9hZD17dGhpcy5zaG93VXBsb2FkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dHYWxsZXJ5PXt0aGlzLnNob3dHYWxsZXJ5fSAvPjtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxMb2FkZXIgLz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgIGlmICh0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiBcIm1vZGFsLWRpYWxvZyBtb2RhbC1tZXNzYWdlIG1vZGFsLWNoYW5nZS1hdmF0YXJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwibW9kYWwtZGlhbG9nIG1vZGFsLWNoYW5nZS1hdmF0YXJcIjtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX1cbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJDaGFuZ2UgeW91ciBhdmF0YXJcIil9PC9oND5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAge3RoaXMuZ2V0Qm9keSgpfVxuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgJ3VzZXInOiBzdGF0ZS5hdXRoLnVzZXJcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyQ3JvcCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL2Nyb3AnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGZpbGVTaXplIGZyb20gJ21pc2Fnby91dGlscy9maWxlLXNpemUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpbWFnZSc6IG51bGwsXG4gICAgICAncHJldmlldyc6IG51bGwsXG4gICAgICAncHJvZ3Jlc3MnOiAwLFxuICAgICAgJ3VwbG9hZGVkJzogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVGaWxlKGltYWdlKSB7XG4gICAgaWYgKGltYWdlLnNpemUgPiB0aGlzLnByb3BzLm9wdGlvbnMudXBsb2FkLmxpbWl0KSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIlNlbGVjdGVkIGZpbGUgaXMgdG9vIGJpZy4gKCUoZmlsZXNpemUpcylcIiksIHtcbiAgICAgICAgJ2ZpbGVzaXplJzogZmlsZVNpemUoaW1hZ2Uuc2l6ZSlcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIGxldCBpbnZhbGlkVHlwZU1zZyA9IGdldHRleHQoXCJTZWxlY3RlZCBmaWxlIHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy51cGxvYWQuYWxsb3dlZF9taW1lX3R5cGVzLmluZGV4T2YoaW1hZ2UudHlwZSkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFR5cGVNc2c7XG4gICAgfVxuXG4gICAgbGV0IGV4dGVuc2lvbkZvdW5kID0gZmFsc2U7XG4gICAgbGV0IGxvd2VyZWRGaWxlbmFtZSA9IGltYWdlLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3BzLm9wdGlvbnMudXBsb2FkLmFsbG93ZWRfZXh0ZW5zaW9ucy5tYXAoZnVuY3Rpb24oZXh0ZW5zaW9uKSB7XG4gICAgICBpZiAobG93ZXJlZEZpbGVuYW1lLnN1YnN0cihleHRlbnNpb24ubGVuZ3RoICogLTEpID09PSBleHRlbnNpb24pIHtcbiAgICAgICAgZXh0ZW5zaW9uRm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFleHRlbnNpb25Gb3VuZCkge1xuICAgICAgcmV0dXJuIGludmFsaWRUeXBlTXNnO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgcGlja0ZpbGUgPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2YXRhci1oaWRkZW4tdXBsb2FkJykuY2xpY2soKTtcbiAgfTtcblxuICB1cGxvYWRGaWxlID0gKCkgPT4ge1xuICAgIGxldCBpbWFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdmF0YXItaGlkZGVuLXVwbG9hZCcpLmZpbGVzWzBdO1xuXG4gICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IHRoaXMudmFsaWRhdGVGaWxlKGltYWdlKTtcbiAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICBzbmFja2Jhci5lcnJvcih2YWxpZGF0aW9uRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaW1hZ2UsXG4gICAgICAncHJldmlldyc6IFVSTC5jcmVhdGVPYmplY3RVUkwoaW1hZ2UpLFxuICAgICAgJ3Byb2dyZXNzJzogMFxuICAgIH0pO1xuXG4gICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBkYXRhLmFwcGVuZCgnYXZhdGFyJywgJ3VwbG9hZCcpO1xuICAgIGRhdGEuYXBwZW5kKCdpbWFnZScsIGltYWdlKTtcblxuICAgIGFqYXgudXBsb2FkKHRoaXMucHJvcHMudXNlci5hcGlfdXJsLmF2YXRhciwgZGF0YSwgKHByb2dyZXNzKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcHJvZ3Jlc3NcbiAgICAgIH0pO1xuICAgIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnb3B0aW9ucyc6IGRhdGEub3B0aW9ucyxcbiAgICAgICAgJ3VwbG9hZGVkJzogZGF0YS5kZXRhaWxcbiAgICAgIH0pO1xuICAgICAgc25hY2tiYXIuaW5mbyhnZXR0ZXh0KFwiWW91ciBpbWFnZSBoYXMgYmVlbiB1cGxvYWRlZCBhbmQgeW91IG1heSBub3cgY3JvcCBpdC5cIikpO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZSxcbiAgICAgICAgICAnaW1hZ2UnOiBudWxsLFxuICAgICAgICAgICdwcm9ncmVzcyc6IDBcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2hvd0Vycm9yKHJlamVjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgZ2V0VXBsb2FkUmVxdWlyZW1lbnRzKG9wdGlvbnMpIHtcbiAgICBsZXQgZXh0ZW5zaW9ucyA9IG9wdGlvbnMuYWxsb3dlZF9leHRlbnNpb25zLm1hcChmdW5jdGlvbihleHRlbnNpb24pIHtcbiAgICAgIHJldHVybiBleHRlbnNpb24uc3Vic3RyKDEpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKGZpbGVzKXMgZmlsZXMgc21hbGxlciB0aGFuICUobGltaXQpc1wiKSwge1xuICAgICAgICAnZmlsZXMnOiBleHRlbnNpb25zLmpvaW4oJywgJyksXG4gICAgICAgICdsaW1pdCc6IGZpbGVTaXplKG9wdGlvbnMubGltaXQpXG4gICAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIGdldFVwbG9hZEJ1dHRvbigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1hdmF0YXItdXBsb2FkXCI+XG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXBpY2stZmlsZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5waWNrRmlsZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiU2VsZWN0IGZpbGVcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgICAge3RoaXMuZ2V0VXBsb2FkUmVxdWlyZW1lbnRzKHRoaXMucHJvcHMub3B0aW9ucy51cGxvYWQpfVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRVcGxvYWRQcm9ncmVzc0xhYmVsKCkge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiJShwcm9ncmVzcylzICUgY29tcGxldGVcIiksIHtcbiAgICAgICAgJ3Byb2dyZXNzJzogdGhpcy5zdGF0ZS5wcm9ncmVzc1xuICAgICAgfSwgdHJ1ZSk7XG4gIH1cblxuICBnZXRVcGxvYWRQcm9ncmVzcygpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1hdmF0YXItdXBsb2FkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXBsb2FkLXByb2dyZXNzXCI+XG4gICAgICAgICAgPGltZyBzcmM9e3RoaXMuc3RhdGUucHJldmlld30gLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJvZ3Jlc3MtYmFyXCIgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW5vdz1cInt0aGlzLnN0YXRlLnByb2dyZXNzfVwiXG4gICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6IHRoaXMuc3RhdGUucHJvZ3Jlc3MgKyAnJSd9fT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPnt0aGlzLmdldFVwbG9hZFByb2dyZXNzTGFiZWwoKX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICByZW5kZXJVcGxvYWQoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2PlxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICBpZD1cImF2YXRhci1oaWRkZW4tdXBsb2FkXCJcbiAgICAgICAgICAgICBjbGFzc05hbWU9XCJoaWRkZW4tZmlsZS11cGxvYWRcIlxuICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwbG9hZEZpbGV9IC8+XG4gICAgICB7dGhpcy5zdGF0ZS5pbWFnZSA/IHRoaXMuZ2V0VXBsb2FkUHJvZ3Jlc3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmdldFVwbG9hZEJ1dHRvbigpfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNiBjb2wtbWQtb2Zmc2V0LTNcIj5cblxuICAgICAgICAgIDxCdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5zaG93SW5kZXh9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ISF0aGlzLnN0YXRlLmltYWdlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWRlZmF1bHQgYnRuLWJsb2NrXCI+XG4gICAgICAgICAgICB7Z2V0dGV4dChcIkNhbmNlbFwiKX1cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG5cbiAgcmVuZGVyQ3JvcCgpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxBdmF0YXJDcm9wIG9wdGlvbnM9e3RoaXMuc3RhdGUub3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dGhpcy5wcm9wcy51c2VyfVxuICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQ9e3RoaXMuc3RhdGUudXBsb2FkZWR9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGU9e3RoaXMucHJvcHMub25Db21wbGV0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Vycm9yPXt0aGlzLnByb3BzLnNob3dFcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgc2hvd0luZGV4PXt0aGlzLnByb3BzLnNob3dJbmRleH0gLz47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuICh0aGlzLnN0YXRlLnVwbG9hZGVkID8gdGhpcy5yZW5kZXJDcm9wKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJlbmRlclVwbG9hZCgpKTtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBpc1ZhbGlkYXRlZCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMucHJvcHMudmFsaWRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gJ2Zvcm0tZ3JvdXAnO1xuICAgIGlmICh0aGlzLmlzVmFsaWRhdGVkKCkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnIGhhcy1mZWVkYmFjayc7XG4gICAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0aW9uID09PSBudWxsKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnIGhhcy1zdWNjZXNzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnIGhhcy1lcnJvcic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBnZXRGZWVkYmFjaygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0aW9uKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJoZWxwLWJsb2NrIGVycm9yc1wiPlxuICAgICAgICB7dGhpcy5wcm9wcy52YWxpZGF0aW9uLm1hcCgoZXJyb3IsIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gPHAga2V5PXt0aGlzLnByb3BzLmZvciArICdGZWVkYmFja0l0ZW0nICsgaX0+e2Vycm9yfTwvcD47XG4gICAgICAgIH0pfVxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmVlZGJhY2tJY29uKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWRhdGVkKCkpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uIGZvcm0tY29udHJvbC1mZWVkYmFja1wiXG4gICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIga2V5PXt0aGlzLnByb3BzLmZvciArICdGZWVkYmFja0ljb24nfT5cbiAgICAgICAge3RoaXMucHJvcHMudmFsaWRhdGlvbiA/ICdjbGVhcicgOiAnY2hlY2snfVxuICAgICAgPC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldEZlZWRiYWNrRGVzY3JpcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZGF0ZWQoKSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxzcGFuIGlkPXt0aGlzLnByb3BzLmZvciArICdfc3RhdHVzJ30gY2xhc3NOYW1lPVwic3Itb25seVwiPlxuICAgICAgICB7dGhpcy5wcm9wcy52YWxpZGF0aW9uID8gZ2V0dGV4dCgnKGVycm9yKScpIDogZ2V0dGV4dCgnKHN1Y2Nlc3MpJyl9XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0SGVscFRleHQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuaGVscFRleHQpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8cCBjbGFzc05hbWU9XCJoZWxwLWJsb2NrXCI+e3RoaXMucHJvcHMuaGVscFRleHR9PC9wPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cbiAgICAgIDxsYWJlbCBjbGFzc05hbWU9eydjb250cm9sLWxhYmVsICcgKyAodGhpcy5wcm9wcy5sYWJlbENsYXNzIHx8ICcnKX1cbiAgICAgICAgICAgICBodG1sRm9yPXt0aGlzLnByb3BzLmZvciB8fCAnJ30+XG4gICAgICAgIHt0aGlzLnByb3BzLmxhYmVsICsgJzonfVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNvbnRyb2xDbGFzcyB8fCAnJ30+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICB7dGhpcy5nZXRGZWVkYmFja0ljb24oKX1cbiAgICAgICAge3RoaXMuZ2V0RmVlZGJhY2tEZXNjcmlwdGlvbigpfVxuICAgICAgICB7dGhpcy5nZXRGZWVkYmFjaygpfVxuICAgICAgICB7dGhpcy5nZXRIZWxwVGV4dCgpfVxuICAgICAgICB7dGhpcy5wcm9wcy5leHRyYSB8fCBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlcXVpcmVkIH0gZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuXG5sZXQgdmFsaWRhdGVSZXF1aXJlZCA9IHJlcXVpcmVkKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGUoKSB7XG4gICAgbGV0IGVycm9ycyA9IHt9O1xuICAgIGlmICghdGhpcy5zdGF0ZS52YWxpZGF0b3JzKSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0b3JzID0ge1xuICAgICAgcmVxdWlyZWQ6IHRoaXMuc3RhdGUudmFsaWRhdG9ycy5yZXF1aXJlZCB8fCB0aGlzLnN0YXRlLnZhbGlkYXRvcnMsXG4gICAgICBvcHRpb25hbDogdGhpcy5zdGF0ZS52YWxpZGF0b3JzLm9wdGlvbmFsIHx8IHt9XG4gICAgfTtcblxuICAgIGxldCB2YWxpZGF0ZWRGaWVsZHMgPSBbXTtcblxuICAgIC8vIGFkZCByZXF1aXJlZCBmaWVsZHMgdG8gdmFsaWRhdGlvblxuICAgIGZvciAobGV0IG5hbWUgaW4gdmFsaWRhdG9ycy5yZXF1aXJlZCkge1xuICAgICAgaWYgKHZhbGlkYXRvcnMucmVxdWlyZWQuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICB2YWxpZGF0b3JzLnJlcXVpcmVkW25hbWVdKSB7XG4gICAgICAgIHZhbGlkYXRlZEZpZWxkcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZCBvcHRpb25hbCBmaWVsZHMgdG8gdmFsaWRhdGlvblxuICAgIGZvciAobGV0IG5hbWUgaW4gdmFsaWRhdG9ycy5vcHRpb25hbCkge1xuICAgICAgaWYgKHZhbGlkYXRvcnMub3B0aW9uYWwuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICB2YWxpZGF0b3JzLm9wdGlvbmFsW25hbWVdKSB7XG4gICAgICAgIHZhbGlkYXRlZEZpZWxkcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIGZpZWxkcyB2YWx1ZXNcbiAgICBmb3IgKGxldCBpIGluIHZhbGlkYXRlZEZpZWxkcykge1xuICAgICAgbGV0IG5hbWUgPSB2YWxpZGF0ZWRGaWVsZHNbaV07XG4gICAgICBsZXQgZmllbGRFcnJvcnMgPSB0aGlzLnZhbGlkYXRlRmllbGQobmFtZSwgdGhpcy5zdGF0ZVtuYW1lXSk7XG5cbiAgICAgIGlmIChmaWVsZEVycm9ycyA9PT0gbnVsbCkge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZEVycm9ycykge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBmaWVsZEVycm9ycztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaXNWYWxpZCgpIHtcbiAgICBsZXQgZXJyb3JzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGZvciAobGV0IGZpZWxkIGluIGVycm9ycykge1xuICAgICAgaWYgKGVycm9ycy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgICAgaWYgKGVycm9yc1tmaWVsZF0gIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhbGlkYXRlRmllbGQobmFtZSwgdmFsdWUpIHtcbiAgICBsZXQgZXJyb3JzID0gW107XG4gICAgaWYgKCF0aGlzLnN0YXRlLnZhbGlkYXRvcnMpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRvcnMgPSB7XG4gICAgICByZXF1aXJlZDogKHRoaXMuc3RhdGUudmFsaWRhdG9ycy5yZXF1aXJlZCB8fCB0aGlzLnN0YXRlLnZhbGlkYXRvcnMpW25hbWVdLFxuICAgICAgb3B0aW9uYWw6ICh0aGlzLnN0YXRlLnZhbGlkYXRvcnMub3B0aW9uYWwgfHwge30pW25hbWVdXG4gICAgfTtcblxuICAgIGxldCByZXF1aXJlZEVycm9yID0gdmFsaWRhdGVSZXF1aXJlZCh2YWx1ZSkgfHwgZmFsc2U7XG5cbiAgICBpZiAodmFsaWRhdG9ycy5yZXF1aXJlZCkge1xuICAgICAgaWYgKHJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgZXJyb3JzID0gW3JlcXVpcmVkRXJyb3JdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSBpbiB2YWxpZGF0b3JzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRvcnMucmVxdWlyZWRbaV0odmFsdWUpO1xuICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHZhbGlkYXRpb25FcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID8gZXJyb3JzIDogbnVsbDtcbiAgICB9IGVsc2UgaWYgKHJlcXVpcmVkRXJyb3IgPT09IGZhbHNlICYmIHZhbGlkYXRvcnMub3B0aW9uYWwpIHtcbiAgICAgIGZvciAobGV0IGkgaW4gdmFsaWRhdG9ycy5vcHRpb25hbCkge1xuICAgICAgICBsZXQgdmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdG9ycy5vcHRpb25hbFtpXSh2YWx1ZSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaCh2YWxpZGF0aW9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID8gZXJyb3JzIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIGZhbHNlID09PSBmaWVsZCB3YXNuJ3QgdmFsaWRhdGVkXG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGJpbmRJbnB1dCA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIChldmVudCkgPT4ge1xuICAgICAgbGV0IG5ld1N0YXRlID0ge1xuICAgICAgICBbbmFtZV06IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfTtcblxuICAgICAgbGV0IGZvcm1FcnJvcnMgPSB0aGlzLnN0YXRlLmVycm9ycyB8fCB7fTtcbiAgICAgIGZvcm1FcnJvcnNbbmFtZV0gPSB0aGlzLnZhbGlkYXRlRmllbGQobmFtZSwgbmV3U3RhdGVbbmFtZV0pO1xuICAgICAgbmV3U3RhdGUuZXJyb3JzID0gZm9ybUVycm9ycztcblxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFuKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3Moc3VjY2Vzcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGhhbmRsZVN1Ym1pdCA9IChldmVudCkgPT4ge1xuICAgIC8vIHdlIGRvbid0IHJlbG9hZCBwYWdlIG9uIHN1Ym1pc3Npb25zXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGlmICh0aGlzLnN0YXRlLmlzTG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsZWFuKCkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2lzTG9hZGluZzogdHJ1ZX0pO1xuICAgICAgbGV0IHByb21pc2UgPSB0aGlzLnNlbmQoKTtcblxuICAgICAgaWYgKHByb21pc2UpIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKChzdWNjZXNzKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNMb2FkaW5nOiBmYWxzZX0pO1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2VzcyhzdWNjZXNzKTtcbiAgICAgICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzTG9hZGluZzogZmFsc2V9KTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKHJlamVjdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNMb2FkaW5nOiBmYWxzZX0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGlzQWN0aXZlKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnBhdGgpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZS5pbmRleE9mKHRoaXMucHJvcHMucGF0aCkgPT09IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXRDbGFzc05hbWUoKSB7XG4gICAgaWYgKHRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuICh0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCAnJykgKyAnICcrICh0aGlzLnByb3BzLmFjdGl2ZUNsYXNzTmFtZSB8fCAnYWN0aXZlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCAnJztcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLy8ganNoaW50IGlnbm9yZTpzdGFydFxuICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cbiAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgIDwvbGk+O1xuICAgIC8vIGpzaGludCBpZ25vcmU6ZW5kXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcImxvYWRlclwifT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibG9hZGVyLXNwaW5uaW5nLXdoZWVsXCI+PC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTG9hZGVyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2xvYWRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1sb2FkZXJcIj5cbiAgICAgIDxMb2FkZXIgLz5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG4iLCJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF2YXRhciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9hdmF0YXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybS1ncm91cCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB7IGRlaHlkcmF0ZSwgYWRkTmFtZUNoYW5nZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2VybmFtZS1oaXN0b3J5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgeyB1cGRhdGVVc2VybmFtZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2Vycyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5pbXBvcnQgKiBhcyByYW5kb20gZnJvbSAnbWlzYWdvL3V0aWxzL3JhbmRvbSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0ICogYXMgdmFsaWRhdG9ycyBmcm9tICdtaXNhZ28vdXRpbHMvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VVc2VybmFtZSBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB1c2VybmFtZTogJycsXG5cbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgdXNlcm5hbWU6IFtcbiAgICAgICAgICB2YWxpZGF0b3JzLnVzZXJuYW1lQ29udGVudCgpLFxuICAgICAgICAgIHZhbGlkYXRvcnMudXNlcm5hbWVNaW5MZW5ndGgoe1xuICAgICAgICAgICAgdXNlcm5hbWVfbGVuZ3RoX21pbjogcHJvcHMub3B0aW9ucy5sZW5ndGhfbWluXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdmFsaWRhdG9ycy51c2VybmFtZU1heExlbmd0aCh7XG4gICAgICAgICAgICB1c2VybmFtZV9sZW5ndGhfbWF4OiBwcm9wcy5vcHRpb25zLmxlbmd0aF9tYXhcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGdldEhlbHBUZXh0KCkge1xuICAgIGxldCBwaHJhc2VzID0gW107XG5cbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmNoYW5nZXNfbGVmdCA+IDApIHtcbiAgICAgIGxldCBtZXNzYWdlID0gbmdldHRleHQoXG4gICAgICAgIFwiWW91IGNhbiBjaGFuZ2UgeW91ciB1c2VybmFtZSAlKGNoYW5nZXNfbGVmdClzIG1vcmUgdGltZS5cIixcbiAgICAgICAgXCJZb3UgY2FuIGNoYW5nZSB5b3VyIHVzZXJuYW1lICUoY2hhbmdlc19sZWZ0KXMgbW9yZSB0aW1lcy5cIixcbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmNoYW5nZXNfbGVmdCk7XG5cbiAgICAgIHBocmFzZXMucHVzaChpbnRlcnBvbGF0ZShtZXNzYWdlLCB7XG4gICAgICAgICdjaGFuZ2VzX2xlZnQnOiB0aGlzLnByb3BzLm9wdGlvbnMuY2hhbmdlc19sZWZ0XG4gICAgICB9LCB0cnVlKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMudXNlci5hY2wubmFtZV9jaGFuZ2VzX2V4cGlyZSA+IDApIHtcbiAgICAgIGxldCBtZXNzYWdlID0gbmdldHRleHQoXG4gICAgICAgIFwiVXNlZCBjaGFuZ2VzIHJlZGVlbSBhZnRlciAlKG5hbWVfY2hhbmdlc19leHBpcmUpcyBkYXkuXCIsXG4gICAgICAgIFwiVXNlZCBjaGFuZ2VzIHJlZGVlbSBhZnRlciAlKG5hbWVfY2hhbmdlc19leHBpcmUpcyBkYXlzLlwiLFxuICAgICAgICB0aGlzLnByb3BzLnVzZXIuYWNsLm5hbWVfY2hhbmdlc19leHBpcmUpO1xuXG4gICAgICBwaHJhc2VzLnB1c2goaW50ZXJwb2xhdGUobWVzc2FnZSwge1xuICAgICAgICAnbmFtZV9jaGFuZ2VzX2V4cGlyZSc6IHRoaXMucHJvcHMudXNlci5hY2wubmFtZV9jaGFuZ2VzX2V4cGlyZVxuICAgICAgfSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBwaHJhc2VzLmxlbmd0aCA/IHBocmFzZXMuam9pbignICcpIDogbnVsbDtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIGxldCBlcnJvcnMgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKGVycm9ycy51c2VybmFtZSkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZXJyb3JzLnVzZXJuYW1lWzBdKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGlmICh0aGlzLnN0YXRlLnVzZXJuYW1lLnRyaW0oKSA9PT0gdGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lKSB7XG4gICAgICBzbmFja2Jhci5pbmZvKGdldHRleHQoXCJZb3VyIG5ldyB1c2VybmFtZSBpcyBzYW1lIGFzIGN1cnJlbnQgb25lLlwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdCh0aGlzLnByb3BzLnVzZXIuYXBpX3VybC51c2VybmFtZSwge1xuICAgICAgJ3VzZXJuYW1lJzogdGhpcy5zdGF0ZS51c2VybmFtZVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VjY2VzcyhzdWNjZXNzKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAndXNlcm5hbWUnOiAnJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcy5jb21wbGV0ZShzdWNjZXNzLnVzZXJuYW1lLCBzdWNjZXNzLnNsdWcsIHN1Y2Nlc3Mub3B0aW9ucyk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJmb3JtLWhvcml6b250YWxcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwgcGFuZWwtZGVmYXVsdCBwYW5lbC1mb3JtXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJwYW5lbC10aXRsZVwiPntnZXR0ZXh0KFwiQ2hhbmdlIHVzZXJuYW1lXCIpfTwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWJvZHlcIj5cblxuICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJOZXcgdXNlcm5hbWVcIil9IGZvcj1cImlkX3VzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCJcbiAgICAgICAgICAgICAgICAgICAgIGhlbHBUZXh0PXt0aGlzLmdldEhlbHBUZXh0KCl9PlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJpZF91c2VybmFtZVwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgndXNlcm5hbWUnKX1cbiAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS51c2VybmFtZX0gLz5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1mb290ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc20tOCBjb2wtc20tb2Zmc2V0LTRcIj5cblxuICAgICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5XCIgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9PlxuICAgICAgICAgICAgICAgIHtnZXR0ZXh0KFwiQ2hhbmdlIHVzZXJuYW1lXCIpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb0NoYW5nZXNMZWZ0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0SGVscFRleHQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5uZXh0X29uKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoXG4gICAgICAgICAgZ2V0dGV4dChcIllvdSB3aWxsIGJlIGFibGUgdG8gY2hhbmdlIHlvdXIgdXNlcm5hbWUgJShuZXh0X2NoYW5nZSlzLlwiKSxcbiAgICAgICAgICB7J25leHRfY2hhbmdlJzogdGhpcy5wcm9wcy5vcHRpb25zLm5leHRfb24uZnJvbU5vdygpfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiWW91IGhhdmUgdXNlZCB1cCBhdmFpbGFibGUgbmFtZSBjaGFuZ2VzLlwiKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHQgcGFuZWwtZm9ybVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgIDxoMyBjbGFzc05hbWU9XCJwYW5lbC10aXRsZVwiPntnZXR0ZXh0KFwiQ2hhbmdlIHVzZXJuYW1lXCIpfTwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtYm9keSBwYW5lbC1tZXNzYWdlLWJvZHlcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgICAge2dldHRleHQoXCJZb3UgY2FuJ3QgY2hhbmdlIHlvdXIgdXNlcm5hbWUgYXQgdGhlIG1vbWVudC5cIil9XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImhlbHAtYmxvY2tcIj5cbiAgICAgICAgICAgIHt0aGlzLmdldEhlbHBUZXh0KCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoYW5nZVVzZXJuYW1lTG9hZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwgcGFuZWwtZGVmYXVsdCBwYW5lbC1mb3JtXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgICAgPGgzIGNsYXNzTmFtZT1cInBhbmVsLXRpdGxlXCI+e2dldHRleHQoXCJDaGFuZ2UgdXNlcm5hbWVcIil9PC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5IHBhbmVsLWJvZHktbG9hZGluZ1wiPlxuXG4gICAgICAgIDxMb2FkZXIgY2xhc3NOYW1lPVwibG9hZGVyIGxvYWRlci1zcGFjZWRcIiAvPlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXNlcm5hbWVIaXN0b3J5IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyVXNlckF2YXRhcihpdGVtKSB7XG4gICAgaWYgKGl0ZW0uY2hhbmdlZF9ieSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxhIGhyZWY9e2l0ZW0uY2hhbmdlZF9ieS5hYnNvbHV0ZV91cmx9IGNsYXNzTmFtZT1cInVzZXItYXZhdGFyXCI+XG4gICAgICAgIDxBdmF0YXIgdXNlcj17aXRlbS5jaGFuZ2VkX2J5fSBzaXplPVwiMTAwXCIgLz5cbiAgICAgIDwvYT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwidXNlci1hdmF0YXJcIj5cbiAgICAgICAgPEF2YXRhciBzaXplPVwiMTAwXCIgLz5cbiAgICAgIDwvc3Bhbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclVzZXJuYW1lKGl0ZW0pIHtcbiAgICBpZiAoaXRlbS5jaGFuZ2VkX2J5KSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGEgaHJlZj17aXRlbS5jaGFuZ2VkX2J5LmFic29sdXRlX3VybH0gY2xhc3NOYW1lPVwiaXRlbS10aXRsZVwiPlxuICAgICAgICB7aXRlbS5jaGFuZ2VkX2J5LnVzZXJuYW1lfVxuICAgICAgPC9hPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgIHtpdGVtLmNoYW5nZWRfYnlfdXNlcm5hbWV9XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXJIaXN0b3J5KCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1oaXN0b3J5IHVpLXJlYWR5XCI+XG4gICAgICA8dWwgY2xhc3NOYW1lPVwibGlzdC1ncm91cFwiPlxuICAgICAgICB7dGhpcy5wcm9wcy5jaGFuZ2VzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwibGlzdC1ncm91cC1pdGVtXCIga2V5PXtpdGVtLmlkfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtY2hhbmdlLWF2YXRhclwiPlxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJVc2VyQXZhdGFyKGl0ZW0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWNoYW5nZS1hdXRob3JcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyVXNlcm5hbWUoaXRlbSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtY2hhbmdlXCI+XG4gICAgICAgICAgICAgIHtpdGVtLm9sZF91c2VybmFtZX1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgICAgIGFycm93X2ZvcndhcmRcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB7aXRlbS5uZXdfdXNlcm5hbWV9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtY2hhbmdlLWRhdGVcIj5cbiAgICAgICAgICAgICAgPGFiYnIgdGl0bGU9e2l0ZW0uY2hhbmdlZF9vbi5mb3JtYXQoJ0xMTCcpfT5cbiAgICAgICAgICAgICAgICB7aXRlbS5jaGFuZ2VkX29uLmZyb21Ob3coKX1cbiAgICAgICAgICAgICAgPC9hYmJyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saT47XG4gICAgICAgIH0pfVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIHJlbmRlckVtcHR5SGlzdG9yeSgpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtaGlzdG9yeSB1aS1yZWFkeVwiPlxuICAgICAgPHVsIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXBcIj5cbiAgICAgICAgPGxpIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXAtaXRlbSBlbXB0eS1tZXNzYWdlXCI+XG4gICAgICAgICAge2dldHRleHQoXCJObyBuYW1lIGNoYW5nZXMgaGF2ZSBiZWVuIHJlY29yZGVkIGZvciB5b3VyIGFjY291bnQuXCIpfVxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIHJlbmRlckhpc3RvcnlQcmV2aWV3KCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1oaXN0b3J5IHVpLXByZXZpZXdcIj5cbiAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgIHtyYW5kb20ucmFuZ2UoMywgNSkubWFwKChpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9XCJsaXN0LWdyb3VwLWl0ZW1cIiBrZXk9e2l9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1jaGFuZ2UtYXZhdGFyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPEF2YXRhciBzaXplPVwiMTAwXCIgLz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWNoYW5nZS1hdXRob3JcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCgzMCwgMTAwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1jaGFuZ2VcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCgzMCwgNTApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgICAgYXJyb3dfZm9yd2FyZFxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVpLXByZXZpZXctdGV4dFwiIHN0eWxlPXt7d2lkdGg6IHJhbmRvbS5pbnQoMzAsIDUwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1jaGFuZ2UtZGF0ZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiByYW5kb20uaW50KDUwLCAxMDApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgfSl9XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmlzTG9hZGVkKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5jaGFuZ2VzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJIaXN0b3J5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFbXB0eUhpc3RvcnkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGlzdG9yeVByZXZpZXcoKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0xvYWRlZDogZmFsc2UsXG4gICAgICBvcHRpb25zOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRpdGxlLnNldCh7XG4gICAgICB0aXRsZTogZ2V0dGV4dChcIkNoYW5nZSB1c2VybmFtZVwiKSxcbiAgICAgIHBhcmVudDogZ2V0dGV4dChcIkNoYW5nZSB5b3VyIG9wdGlvbnNcIilcbiAgICB9KTtcblxuICAgIFByb21pc2UuYWxsKFtcbiAgICAgIGFqYXguZ2V0KHRoaXMucHJvcHMudXNlci5hcGlfdXJsLnVzZXJuYW1lKSxcbiAgICAgIGFqYXguZ2V0KG1pc2Fnby5nZXQoJ1VTRVJOQU1FX0NIQU5HRVNfQVBJJyksIHt1c2VyOiB0aGlzLnByb3BzLnVzZXIuaWR9KVxuICAgIF0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGNoYW5nZXNfbGVmdDogZGF0YVswXS5jaGFuZ2VzX2xlZnQsXG4gICAgICAgICAgbGVuZ3RoX21pbjogZGF0YVswXS5sZW5ndGhfbWluLFxuICAgICAgICAgIGxlbmd0aF9tYXg6IGRhdGFbMF0ubGVuZ3RoX21heCxcbiAgICAgICAgICBuZXh0X29uOiBkYXRhWzBdLm5leHRfb24gPyBtb21lbnQoZGF0YVswXS5uZXh0X29uKSA6IG51bGwsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdG9yZS5kaXNwYXRjaChkZWh5ZHJhdGUoZGF0YVsxXS5yZXN1bHRzKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIG9uQ29tcGxldGUgPSAodXNlcm5hbWUsIHNsdWcsIG9wdGlvbnMpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcblxuICAgIHN0b3JlLmRpc3BhdGNoKFxuICAgICAgYWRkTmFtZUNoYW5nZSh7IHVzZXJuYW1lLCBzbHVnIH0sIHRoaXMucHJvcHMudXNlciwgdGhpcy5wcm9wcy51c2VyKSk7XG4gICAgc3RvcmUuZGlzcGF0Y2goXG4gICAgICB1cGRhdGVVc2VybmFtZSh0aGlzLnByb3BzLnVzZXIsIHVzZXJuYW1lLCBzbHVnKSk7XG5cbiAgICBzbmFja2Jhci5zdWNjZXNzKGdldHRleHQoXCJZb3VyIHVzZXJuYW1lIGhhcyBiZWVuIGNoYW5nZWQgc3VjY2Vzc2Z1bGx5LlwiKSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgZ2V0Q2hhbmdlRm9ybSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRlZCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUub3B0aW9ucy5jaGFuZ2VzX2xlZnQgPiAwKSB7XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgICAgcmV0dXJuIDxDaGFuZ2VVc2VybmFtZSB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dGhpcy5zdGF0ZS5vcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlPXt0aGlzLm9uQ29tcGxldGV9IC8+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPE5vQ2hhbmdlc0xlZnQgb3B0aW9ucz17dGhpcy5zdGF0ZS5vcHRpb25zfSAvPjtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxDaGFuZ2VVc2VybmFtZUxvYWRpbmcgLz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXY+XG4gICAgICB7dGhpcy5nZXRDaGFuZ2VGb3JtKCl9XG4gICAgICA8VXNlcm5hbWVIaXN0b3J5IGlzTG9hZGVkPXt0aGlzLnN0YXRlLmlzTG9hZGVkfVxuICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzPXt0aGlzLnByb3BzWyd1c2VybmFtZS1oaXN0b3J5J119IC8+XG4gICAgPC9kaXY+XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IEZvcm1Hcm91cCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtLWdyb3VwJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgU2VsZWN0IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3NlbGVjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFllc05vU3dpdGNoIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3llcy1uby1zd2l0Y2gnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB7IHBhdGNoVXNlciB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy9hdXRoJztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCB0aXRsZSBmcm9tICdtaXNhZ28vc2VydmljZXMvcGFnZS10aXRsZSc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG5cbiAgICAgICdpc19oaWRpbmdfcHJlc2VuY2UnOiBwcm9wcy51c2VyLmlzX2hpZGluZ19wcmVzZW5jZSxcbiAgICAgICdsaW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190byc6IHByb3BzLnVzZXIubGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8sXG4gICAgICAnc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcyc6IHByb3BzLnVzZXIuc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcyxcbiAgICAgICdzdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzJzogcHJvcHMudXNlci5zdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzLFxuXG4gICAgICAnZXJyb3JzJzoge31cbiAgICB9O1xuXG4gICAgdGhpcy5wcml2YXRlVGhyZWFkSW52aXRlc0Nob2ljZXMgPSBbXG4gICAgICB7XG4gICAgICAgICd2YWx1ZSc6IDAsXG4gICAgICAgICdpY29uJzogJ2hlbHBfb3V0bGluZScsXG4gICAgICAgICdsYWJlbCc6IGdldHRleHQoJ0V2ZXJ5Ym9keScpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndmFsdWUnOiAxLFxuICAgICAgICAnaWNvbic6ICdkb25lX2FsbCcsXG4gICAgICAgICdsYWJlbCc6IGdldHRleHQoJ1VzZXJzIEkgZm9sbG93JylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd2YWx1ZSc6IDIsXG4gICAgICAgICdpY29uJzogJ2hpZ2hsaWdodF9vZmYnLFxuICAgICAgICAnbGFiZWwnOiBnZXR0ZXh0KCdOb2JvZHknKVxuICAgICAgfVxuICAgIF07XG5cbiAgICB0aGlzLnN1YnNjcmliZVRvQ2hvaWNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgJ3ZhbHVlJzogMCxcbiAgICAgICAgJ2ljb24nOiAnYm9va21hcmtfYm9yZGVyJyxcbiAgICAgICAgJ2xhYmVsJzogZ2V0dGV4dCgnTm8nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3ZhbHVlJzogMSxcbiAgICAgICAgJ2ljb24nOiAnYm9va21hcmsnLFxuICAgICAgICAnbGFiZWwnOiBnZXR0ZXh0KCdCb29rbWFyaycpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndmFsdWUnOiAyLFxuICAgICAgICAnaWNvbic6ICdtYWlsJyxcbiAgICAgICAgJ2xhYmVsJzogZ2V0dGV4dCgnQm9va21hcmsgd2l0aCBlLW1haWwgbm90aWZpY2F0aW9uJylcbiAgICAgIH1cbiAgICBdO1xuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gYWpheC5wb3N0KHRoaXMucHJvcHMudXNlci5hcGlfdXJsLm9wdGlvbnMsIHtcbiAgICAgICdpc19oaWRpbmdfcHJlc2VuY2UnOiB0aGlzLnN0YXRlLmlzX2hpZGluZ19wcmVzZW5jZSxcbiAgICAgICdsaW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190byc6IHRoaXMuc3RhdGUubGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8sXG4gICAgICAnc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcyc6IHRoaXMuc3RhdGUuc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcyxcbiAgICAgICdzdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzJzogdGhpcy5zdGF0ZS5zdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKCkge1xuICAgIHN0b3JlLmRpc3BhdGNoKHBhdGNoVXNlcih7XG4gICAgICAnaXNfaGlkaW5nX3ByZXNlbmNlJzogdGhpcy5zdGF0ZS5pc19oaWRpbmdfcHJlc2VuY2UsXG4gICAgICAnbGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8nOiB0aGlzLnN0YXRlLmxpbWl0c19wcml2YXRlX3RocmVhZF9pbnZpdGVzX3RvLFxuICAgICAgJ3N1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHMnOiB0aGlzLnN0YXRlLnN1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHMsXG4gICAgICAnc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkcyc6IHRoaXMuc3RhdGUuc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkc1xuICAgIH0pKTtcbiAgICBzbmFja2Jhci5zdWNjZXNzKGdldHRleHQoXCJZb3VyIGZvcnVtIG9wdGlvbnMgaGF2ZSBiZWVuIGNoYW5nZWQuXCIpKTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJQbGVhc2UgcmVsb2FkIHBhZ2UgYW5kIHRyeSBhZ2Fpbi5cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRpdGxlLnNldCh7XG4gICAgICB0aXRsZTogZ2V0dGV4dChcIkZvcnVtIG9wdGlvbnNcIiksXG4gICAgICBwYXJlbnQ6IGdldHRleHQoXCJDaGFuZ2UgeW91ciBvcHRpb25zXCIpXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9IGNsYXNzTmFtZT1cImZvcm0taG9yaXpvbnRhbFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0IHBhbmVsLWZvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInBhbmVsLXRpdGxlXCI+e2dldHRleHQoXCJDaGFuZ2UgZm9ydW0gb3B0aW9uc1wiKX08L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG5cbiAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICA8bGVnZW5kPntnZXR0ZXh0KFwiUHJpdmFjeSBzZXR0aW5nc1wiKX08L2xlZ2VuZD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIkhpZGUgbXkgcHJlc2VuY2VcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIGhlbHBUZXh0PXtnZXR0ZXh0KFwiSWYgeW91IGhpZGUgeW91ciBwcmVzZW5jZSwgb25seSBtZW1iZXJzIHdpdGggcGVybWlzc2lvbiB0byBzZWUgaGlkZGVuIHVzZXJzIHdpbGwgc2VlIHdoZW4geW91IGFyZSBvbmxpbmUuXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJpZF9pc19oaWRpbmdfcHJlc2VuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgICA8WWVzTm9Td2l0Y2ggaWQ9XCJpZF9pc19oaWRpbmdfcHJlc2VuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk9uPVwidmlzaWJpbGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uT2ZmPVwidmlzaWJpbGl0eV9vZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxPbj17Z2V0dGV4dChcIlNob3cgbXkgcHJlc2VuY2UgdG8gb3RoZXIgdXNlcnNcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbE9mZj17Z2V0dGV4dChcIkhpZGUgbXkgcHJlc2VuY2UgZnJvbSBvdGhlciB1c2Vyc1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnaXNfaGlkaW5nX3ByZXNlbmNlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5pc19oaWRpbmdfcHJlc2VuY2V9IC8+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlByaXZhdGUgdGhyZWFkIGludml0YXRpb25zXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJpZF9saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190b1wiXG4gICAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICAgIDxTZWxlY3QgaWQ9XCJpZF9saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190b1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnbGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8nKX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190b31cbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPXt0aGlzLnByaXZhdGVUaHJlYWRJbnZpdGVzQ2hvaWNlc30gLz5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICA8bGVnZW5kPntnZXR0ZXh0KFwiQXV0b21hdGljIHN1YnNjcmlwdGlvbnNcIil9PC9sZWdlbmQ+XG5cbiAgICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJUaHJlYWRzIEkgc3RhcnRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImlkX3N1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgICA8U2VsZWN0IGlkPVwiaWRfc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcycpfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnN1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHN9XG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz17dGhpcy5zdWJzY3JpYmVUb0Nob2ljZXN9IC8+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlRocmVhZHMgSSByZXBseSB0b1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiaWRfc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICAgIDxTZWxlY3QgaWQ9XCJpZF9zdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdzdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzJyl9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkc31cbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPXt0aGlzLnN1YnNjcmliZVRvQ2hvaWNlc30gLz5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNtLTggY29sLXNtLW9mZnNldC00XCI+XG5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeVwiIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAgICB7Z2V0dGV4dChcIlNhdmUgY2hhbmdlc1wiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBMaSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9saSc7IC8vanNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7IC8vanNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBTaWRlTmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8vIGpzaGludCBpZ25vcmU6c3RhcnRcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJsaXN0LWdyb3VwIG5hdi1zaWRlXCI+XG4gICAgICB7dGhpcy5wcm9wcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiA8TGluayB0bz17dGhpcy5wcm9wcy5iYXNlVXJsICsgb3B0aW9uLmNvbXBvbmVudCArICcvJ31cbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXAtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzc05hbWU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAga2V5PXtvcHRpb24uY29tcG9uZW50fT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICB7b3B0aW9uLmljb259XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9MaW5rPjtcbiAgICAgIH0pfVxuICAgIDwvZGl2PjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYWN0TmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8vIGpzaGludCBpZ25vcmU6c3RhcnRcbiAgICByZXR1cm4gPHVsIGNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnVcIiByb2xlPVwibWVudVwiPlxuICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gPExpIHBhdGg9e3RoaXMucHJvcHMuYmFzZVVybCArIG9wdGlvbi5jb21wb25lbnQgKyAnLyd9XG4gICAgICAgICAgICAgICAgICAga2V5PXtvcHRpb24uY29tcG9uZW50fT5cbiAgICAgICAgICA8TGluayB0bz17dGhpcy5wcm9wcy5iYXNlVXJsICsgb3B0aW9uLmNvbXBvbmVudCArICcvJ30+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgIHtvcHRpb24uaWNvbn1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvTGk+O1xuICAgICAgfSl9XG4gICAgPC91bD47XG4gICAgLy8ganNoaW50IGlnbm9yZTplbmRcbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgU2lkZU5hdiwgQ29tcGFjdE5hdiB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL29wdGlvbnMvbmF2cyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IENoYW5nZUZvcnVtT3B0aW9ucyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL2ZvcnVtLW9wdGlvbnMnO1xuaW1wb3J0IENoYW5nZVVzZXJuYW1lIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL29wdGlvbnMvY2hhbmdlLXVzZXJuYW1lJztcbmltcG9ydCBDaGFuZ2VTaWduSW5DcmVkZW50aWFscyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL3NpZ24taW4tY3JlZGVudGlhbHMnO1xuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRyb3Bkb3duOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHRvZ2dsZU5hdiA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5kcm9wZG93bikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyb3Bkb3duOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkcm9wZG93bjogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldFRvZ2dsZU5hdkNsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5kcm9wZG93bikge1xuICAgICAgcmV0dXJuICdidG4gYnRuLWRlZmF1bHQgYnRuLWljb24gb3Blbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnYnRuIGJ0bi1kZWZhdWx0IGJ0bi1pY29uJztcbiAgICB9XG4gIH1cblxuICBnZXRDb21wYWN0TmF2Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duKSB7XG4gICAgICByZXR1cm4gJ2NvbXBhY3QtbmF2IG9wZW4nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2NvbXBhY3QtbmF2JztcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UgcGFnZS1vcHRpb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG5cbiAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwicHVsbC1sZWZ0XCI+e2dldHRleHQoXCJDaGFuZ2UgeW91ciBvcHRpb25zXCIpfTwvaDE+XG5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBidG4taWNvbiBidG4tZHJvcGRvd24tdG9nZ2xlIGhpZGRlbi1tZCBoaWRkZW4tbGdcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnRvZ2dsZU5hdn1cbiAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e3RoaXMuc3RhdGUuZHJvcGRvd24gPyAndHJ1ZScgOiAnZmFsc2UnfT5cbiAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgICAgbWVudVxuICAgICAgICAgICAgPC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDb21wYWN0TmF2Q2xhc3NOYW1lKCl9PlxuXG4gICAgICAgIDxDb21wYWN0TmF2IG9wdGlvbnM9e21pc2Fnby5nZXQoJ1VTRVJfT1BUSU9OUycpfVxuICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXttaXNhZ28uZ2V0KCdVU0VSQ1BfVVJMJyl9IC8+XG5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTMgaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuXG4gICAgICAgICAgICA8U2lkZU5hdiBvcHRpb25zPXttaXNhZ28uZ2V0KCdVU0VSX09QVElPTlMnKX1cbiAgICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e21pc2Fnby5nZXQoJ1VTRVJDUF9VUkwnKX0gLz5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTlcIj5cblxuICAgICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3Qoc3RvcmUpIHtcbiAgcmV0dXJuIHtcbiAgICAndGljayc6IHN0b3JlLnRpY2sudGljayxcbiAgICAndXNlcic6IHN0b3JlLmF1dGgudXNlcixcbiAgICAndXNlcm5hbWUtaGlzdG9yeSc6IHN0b3JlWyd1c2VybmFtZS1oaXN0b3J5J11cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzKCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHBhdGg6IG1pc2Fnby5nZXQoJ1VTRVJDUF9VUkwnKSArICdmb3J1bS1vcHRpb25zLycsXG4gICAgICBjb21wb25lbnQ6IGNvbm5lY3Qoc2VsZWN0KShDaGFuZ2VGb3J1bU9wdGlvbnMpXG4gICAgfSxcbiAgICB7XG4gICAgICBwYXRoOiBtaXNhZ28uZ2V0KCdVU0VSQ1BfVVJMJykgKyAnY2hhbmdlLXVzZXJuYW1lLycsXG4gICAgICBjb21wb25lbnQ6IGNvbm5lY3Qoc2VsZWN0KShDaGFuZ2VVc2VybmFtZSlcbiAgICB9LFxuICAgIHtcbiAgICAgIHBhdGg6IG1pc2Fnby5nZXQoJ1VTRVJDUF9VUkwnKSArICdzaWduLWluLWNyZWRlbnRpYWxzLycsXG4gICAgICBjb21wb25lbnQ6IGNvbm5lY3Qoc2VsZWN0KShDaGFuZ2VTaWduSW5DcmVkZW50aWFscylcbiAgICB9XG4gIF07XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IEZvcm1Hcm91cCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtLWdyb3VwJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgdGl0bGUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3BhZ2UtdGl0bGUnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgKiBhcyB2YWxpZGF0b3JzIGZyb20gJ21pc2Fnby91dGlscy92YWxpZGF0b3JzJztcblxuZXhwb3J0IGNsYXNzIENoYW5nZUVtYWlsIGV4dGVuZHMgRm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIG5ld19lbWFpbDogJycsXG4gICAgICBwYXNzd29yZDogJycsXG5cbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgbmV3X2VtYWlsOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy5lbWFpbCgpXG4gICAgICAgIF0sXG4gICAgICAgIHBhc3N3b3JkOiBbXVxuICAgICAgfSxcblxuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBsZXQgZXJyb3JzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGxldCBsZW5ndGhzID0gW1xuICAgICAgdGhpcy5zdGF0ZS5uZXdfZW1haWwudHJpbSgpLmxlbmd0aCxcbiAgICAgIHRoaXMuc3RhdGUucGFzc3dvcmQudHJpbSgpLmxlbmd0aFxuICAgIF07XG5cbiAgICBpZiAobGVuZ3Rocy5pbmRleE9mKDApICE9PSAtMSkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkZpbGwgb3V0IGFsbCBmaWVsZHMuXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLm5ld19lbWFpbCkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZXJyb3JzLm5ld19lbWFpbFswXSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuY2hhbmdlX2VtYWlsLCB7XG4gICAgICBuZXdfZW1haWw6IHRoaXMuc3RhdGUubmV3X2VtYWlsLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMuc3RhdGUucGFzc3dvcmQsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKHJlc3BvbnNlKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBuZXdfZW1haWw6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnXG4gICAgfSk7XG5cbiAgICBzbmFja2Jhci5zdWNjZXNzKHJlc3BvbnNlLmRldGFpbCk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICBpZiAocmVqZWN0aW9uLm5ld19lbWFpbCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24ubmV3X2VtYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNuYWNrYmFyLmVycm9yKHJlamVjdGlvbi5wYXNzd29yZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJmb3JtLWhvcml6b250YWxcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidHlwZVwiIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0gLz5cbiAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHQgcGFuZWwtZm9ybVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj57Z2V0dGV4dChcIkNoYW5nZSBlLW1haWwgYWRkcmVzc1wiKX08L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG5cbiAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiTmV3IGUtbWFpbFwiKX0gZm9yPVwiaWRfbmV3X2VtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlkX25ld19lbWFpbFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnbmV3X2VtYWlsJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubmV3X2VtYWlsfSAvPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgICAgPGhyIC8+XG5cbiAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiWW91ciBjdXJyZW50IHBhc3N3b3JkXCIpfSBmb3I9XCJpZF9wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGlkPVwiaWRfcGFzc3dvcmRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGFzc3dvcmR9IC8+XG4gICAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNtLTggY29sLXNtLW9mZnNldC00XCI+XG5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeVwiIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAgICB7Z2V0dGV4dChcIkNoYW5nZSBlLW1haWxcIil9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoYW5nZVBhc3N3b3JkIGV4dGVuZHMgRm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIG5ld19wYXNzd29yZDogJycsXG4gICAgICByZXBlYXRfcGFzc3dvcmQ6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnLFxuXG4gICAgICB2YWxpZGF0b3JzOiB7XG4gICAgICAgIG5ld19wYXNzd29yZDogW1xuICAgICAgICAgIHZhbGlkYXRvcnMucGFzc3dvcmRNaW5MZW5ndGgobWlzYWdvLmdldCgnU0VUVElOR1MnKSlcbiAgICAgICAgXSxcbiAgICAgICAgcmVwZWF0X3Bhc3N3b3JkOiBbXSxcbiAgICAgICAgcGFzc3dvcmQ6IFtdXG4gICAgICB9LFxuXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIGxldCBlcnJvcnMgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgbGV0IGxlbmd0aHMgPSBbXG4gICAgICB0aGlzLnN0YXRlLm5ld19wYXNzd29yZC50cmltKCkubGVuZ3RoLFxuICAgICAgdGhpcy5zdGF0ZS5yZXBlYXRfcGFzc3dvcmQudHJpbSgpLmxlbmd0aCxcbiAgICAgIHRoaXMuc3RhdGUucGFzc3dvcmQudHJpbSgpLmxlbmd0aFxuICAgIF07XG5cbiAgICBpZiAobGVuZ3Rocy5pbmRleE9mKDApICE9PSAtMSkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkZpbGwgb3V0IGFsbCBmaWVsZHMuXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLm5ld19wYXNzd29yZCkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZXJyb3JzLm5ld19wYXNzd29yZFswXSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUubmV3X3Bhc3N3b3JkLnRyaW0oKSAhPT0gdGhpcy5zdGF0ZS5yZXBlYXRfcGFzc3dvcmQudHJpbSgpKSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiTmV3IHBhc3N3b3JkcyBhcmUgZGlmZmVyZW50LlwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuY2hhbmdlX3Bhc3N3b3JkLCB7XG4gICAgICBuZXdfcGFzc3dvcmQ6IHRoaXMuc3RhdGUubmV3X3Bhc3N3b3JkLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMuc3RhdGUucGFzc3dvcmRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MocmVzcG9uc2UpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIG5ld19wYXNzd29yZDogJycsXG4gICAgICByZXBlYXRfcGFzc3dvcmQ6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnXG4gICAgfSk7XG5cbiAgICBzbmFja2Jhci5zdWNjZXNzKHJlc3BvbnNlLmRldGFpbCk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICBpZiAocmVqZWN0aW9uLm5ld19wYXNzd29yZCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24ubmV3X3Bhc3N3b3JkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNuYWNrYmFyLmVycm9yKHJlamVjdGlvbi5wYXNzd29yZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJmb3JtLWhvcml6b250YWxcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidHlwZVwiIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0gLz5cbiAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHQgcGFuZWwtZm9ybVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj57Z2V0dGV4dChcIkNoYW5nZSBwYXNzd29yZFwiKX08L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG5cbiAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiTmV3IHBhc3N3b3JkXCIpfSBmb3I9XCJpZF9uZXdfcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz1cImNvbC1zbS00XCIgY29udHJvbENsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cImlkX25ld19wYXNzd29yZFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnbmV3X3Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubmV3X3Bhc3N3b3JkfSAvPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlJlcGVhdCBwYXNzd29yZFwiKX0gZm9yPVwiaWRfcmVwZWF0X3Bhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgaWQ9XCJpZF9yZXBlYXRfcGFzc3dvcmRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3JlcGVhdF9wYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnJlcGVhdF9wYXNzd29yZH0gLz5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgIDxociAvPlxuXG4gICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIllvdXIgY3VycmVudCBwYXNzd29yZFwiKX0gZm9yPVwiaWRfcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz1cImNvbC1zbS00XCIgY29udHJvbENsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cImlkX3Bhc3N3b3JkXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdwYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnBhc3N3b3JkfSAvPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWZvb3RlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1zbS04IGNvbC1zbS1vZmZzZXQtNFwiPlxuXG4gICAgICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXByaW1hcnlcIiBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ30+XG4gICAgICAgICAgICAgICAge2dldHRleHQoXCJDaGFuZ2UgcGFzc3dvcmRcIil9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aXRsZS5zZXQoe1xuICAgICAgdGl0bGU6IGdldHRleHQoXCJDaGFuZ2UgZW1haWwgb3IgcGFzc3dvcmRcIiksXG4gICAgICBwYXJlbnQ6IGdldHRleHQoXCJDaGFuZ2UgeW91ciBvcHRpb25zXCIpXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2PlxuICAgICAgPENoYW5nZUVtYWlsIHVzZXI9e3RoaXMucHJvcHMudXNlcn0gLz5cbiAgICAgIDxDaGFuZ2VQYXNzd29yZCB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IC8+XG5cbiAgICAgIDxwIGNsYXNzTmFtZT1cIm1lc3NhZ2UtbGluZVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxhIGhyZWY9e21pc2Fnby5nZXQoJ0ZPUkdPVFRFTl9QQVNTV09SRF9VUkwnKX0+XG4gICAgICAgICAge2dldHRleHQoXCJDaGFuZ2UgZm9yZ290dGVuIHBhc3N3b3JkXCIpfVxuICAgICAgICA8L2E+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgenhjdmJuIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy96eGN2Ym4nO1xuXG5leHBvcnQgY29uc3QgU1RZTEVTID0gW1xuICAncHJvZ3Jlc3MtYmFyLWRhbmdlcicsXG4gICdwcm9ncmVzcy1iYXItd2FybmluZycsXG4gICdwcm9ncmVzcy1iYXItd2FybmluZycsXG4gICdwcm9ncmVzcy1iYXItcHJpbWFyeScsXG4gICdwcm9ncmVzcy1iYXItc3VjY2Vzcydcbl07XG5cbmV4cG9ydCBjb25zdCBMQUJFTFMgPSBbXG4gIGdldHRleHQoXCJFbnRlcmVkIHBhc3N3b3JkIGlzIHZlcnkgd2Vhay5cIiksXG4gIGdldHRleHQoXCJFbnRlcmVkIHBhc3N3b3JkIGlzIHdlYWsuXCIpLFxuICBnZXR0ZXh0KFwiRW50ZXJlZCBwYXNzd29yZCBpcyBhdmVyYWdlLlwiKSxcbiAgZ2V0dGV4dChcIkVudGVyZWQgcGFzc3dvcmQgaXMgc3Ryb25nLlwiKSxcbiAgZ2V0dGV4dChcIkVudGVyZWQgcGFzc3dvcmQgaXMgdmVyeSBzdHJvbmcuXCIpXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5fc2NvcmUgPSAwO1xuICAgIHRoaXMuX3Bhc3N3b3JkID0gbnVsbDtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXTtcbiAgfVxuXG4gIGdldFNjb3JlKHBhc3N3b3JkLCBpbnB1dHMpIHtcbiAgICBsZXQgY2FjaGVTdGFsZSA9IGZhbHNlO1xuXG4gICAgaWYgKHBhc3N3b3JkLnRyaW0oKSAhPT0gdGhpcy5fcGFzc3dvcmQpIHtcbiAgICAgIGNhY2hlU3RhbGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpbnB1dHMubGVuZ3RoICE9PSB0aGlzLl9pbnB1dHMubGVuZ3RoKSB7XG4gICAgICBjYWNoZVN0YWxlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRzLm1hcCgodmFsdWUsIGkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLnRyaW0oKSAhPT0gdGhpcy5faW5wdXRzW2ldKSB7XG4gICAgICAgICAgY2FjaGVTdGFsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjYWNoZVN0YWxlKSB7XG4gICAgICB0aGlzLl9zY29yZSA9IHp4Y3Zibi5zY29yZVBhc3N3b3JkKHBhc3N3b3JkLCBpbnB1dHMpO1xuICAgICAgdGhpcy5fcGFzc3dvcmQgPSBwYXNzd29yZC50cmltKCk7XG4gICAgICB0aGlzLl9pbnB1dHMgPSBpbnB1dHMubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50cmltKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2NvcmU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGxldCBzY29yZSA9IHRoaXMuZ2V0U2NvcmUodGhpcy5wcm9wcy5wYXNzd29yZCwgdGhpcy5wcm9wcy5pbnB1dHMpO1xuXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiaGVscC1ibG9jayBwYXNzd29yZC1zdHJlbmd0aFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwcm9ncmVzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJwcm9ncmVzcy1iYXIgXCIgKyBTVFlMRVNbc2NvcmVdfVxuICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6ICgyMCArICgyMCAqIHNjb3JlKSkgKyAnJSd9fVxuICAgICAgICAgICAgIHJvbGU9XCJwcm9ncmVzcy1iYXJcIlxuICAgICAgICAgICAgIGFyaWEtdmFsdWVub3c9e3Njb3JlfVxuICAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCJcbiAgICAgICAgICAgICBhcmlhLXZhbHVlbWF4PVwiNFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgIHtMQUJFTFNbc2NvcmVdfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc21hbGxcIj5cbiAgICAgICAge0xBQkVMU1tzY29yZV19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBSZWdpc3Rlck1vZGFsIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3JlZ2lzdGVyLmpzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgY2FwdGNoYSBmcm9tICdtaXNhZ28vc2VydmljZXMvY2FwdGNoYSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1vZGFsIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2RhbCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHp4Y3ZibiBmcm9tICdtaXNhZ28vc2VydmljZXMvenhjdmJuJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlLFxuICAgICAgJ2lzTG9hZGVkJzogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBzaG93UmVnaXN0ZXJNb2RhbCA9ICgpID0+IHtcbiAgICBpZiAobWlzYWdvLmdldCgnU0VUVElOR1MnKS5hY2NvdW50X2FjdGl2YXRpb24gPT09ICdjbG9zZWQnKSB7XG4gICAgICBzbmFja2Jhci5pbmZvKGdldHRleHQoXCJOZXcgcmVnaXN0cmF0aW9ucyBhcmUgY3VycmVudGx5IGRpc2FibGVkLlwiKSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmlzTG9hZGVkKSB7XG4gICAgICBtb2RhbC5zaG93KFJlZ2lzdGVyTW9kYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgJ2lzTG9hZGluZyc6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBQcm9taXNlLmFsbChbXG4gICAgICAgIGNhcHRjaGEubG9hZCgpLFxuICAgICAgICB6eGN2Ym4ubG9hZCgpXG4gICAgICBdKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmlzTG9hZGVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG4gICAgICAgICAgICAnaXNMb2FkZWQnOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbW9kYWwuc2hvdyhSZWdpc3Rlck1vZGFsKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBnZXRDbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY2xhc3NOYW1lICsgKHRoaXMuc3RhdGUuaXNMb2FkaW5nID8gJyBidG4tbG9hZGluZycgOiAnJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLnNob3dSZWdpc3Rlck1vZGFsfVxuICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17J2J0biAnICsgdGhpcy5nZXRDbGFzc05hbWUoKX1cbiAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRlZH0+XG4gICAgICB7Z2V0dGV4dChcIlJlZ2lzdGVyXCIpfVxuICAgICAge3RoaXMuc3RhdGUuaXNMb2FkaW5nID8gPExvYWRlciAvPiA6IG51bGwgfVxuICAgIDwvYnV0dG9uPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IEZvcm1Hcm91cCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtLWdyb3VwJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUGFzc3dvcmRTdHJlbmd0aCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wYXNzd29yZC1zdHJlbmd0aCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IGF1dGggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2F1dGgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBjYXB0Y2hhIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9jYXB0Y2hhJztcbmltcG9ydCBtb2RhbCBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9kYWwnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgc2hvd0Jhbm5lZFBhZ2UgZnJvbSAnbWlzYWdvL3V0aWxzL2Jhbm5lZC1wYWdlJztcbmltcG9ydCAqIGFzIHZhbGlkYXRvcnMgZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJGb3JtIGV4dGVuZHMgRm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpc0xvYWRpbmcnOiBmYWxzZSxcblxuICAgICAgJ3VzZXJuYW1lJzogJycsXG4gICAgICAnZW1haWwnOiAnJyxcbiAgICAgICdwYXNzd29yZCc6ICcnLFxuICAgICAgJ2NhcHRjaGEnOiAnJyxcblxuICAgICAgJ3ZhbGlkYXRvcnMnOiB7XG4gICAgICAgICd1c2VybmFtZSc6IFtcbiAgICAgICAgICB2YWxpZGF0b3JzLnVzZXJuYW1lQ29udGVudCgpLFxuICAgICAgICAgIHZhbGlkYXRvcnMudXNlcm5hbWVNaW5MZW5ndGgobWlzYWdvLmdldCgnU0VUVElOR1MnKSksXG4gICAgICAgICAgdmFsaWRhdG9ycy51c2VybmFtZU1heExlbmd0aChtaXNhZ28uZ2V0KCdTRVRUSU5HUycpKVxuICAgICAgICBdLFxuICAgICAgICAnZW1haWwnOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy5lbWFpbCgpXG4gICAgICAgIF0sXG4gICAgICAgICdwYXNzd29yZCc6IFtcbiAgICAgICAgICB2YWxpZGF0b3JzLnBhc3N3b3JkTWluTGVuZ3RoKG1pc2Fnby5nZXQoJ1NFVFRJTkdTJykpXG4gICAgICAgIF0sXG4gICAgICAgICdjYXB0Y2hhJzogY2FwdGNoYS52YWxpZGF0b3IoKVxuICAgICAgfSxcblxuICAgICAgJ2Vycm9ycyc6IHt9XG4gICAgfTtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJGb3JtIGNvbnRhaW5zIGVycm9ycy5cIikpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICdlcnJvcnMnOiB0aGlzLnZhbGlkYXRlKClcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdChtaXNhZ28uZ2V0KCdVU0VSU19BUEknKSwge1xuICAgICAgJ3VzZXJuYW1lJzogdGhpcy5zdGF0ZS51c2VybmFtZSxcbiAgICAgICdlbWFpbCc6IHRoaXMuc3RhdGUuZW1haWwsXG4gICAgICAncGFzc3dvcmQnOiB0aGlzLnN0YXRlLnBhc3N3b3JkLFxuICAgICAgJ2NhcHRjaGEnOiB0aGlzLnN0YXRlLmNhcHRjaGFcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MoYXBpUmVzcG9uc2UpIHtcbiAgICB0aGlzLnByb3BzLmNhbGxiYWNrKGFwaVJlc3BvbnNlKTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnZXJyb3JzJzogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdGF0ZS5lcnJvcnMsIHJlamVjdGlvbilcbiAgICAgIH0pO1xuICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkZvcm0gY29udGFpbnMgZXJyb3JzLlwiKSk7XG4gICAgfSBlbHNlIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDMgJiYgcmVqZWN0aW9uLmJhbikge1xuICAgICAgc2hvd0Jhbm5lZFBhZ2UocmVqZWN0aW9uLmJhbik7XG4gICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZ2V0TGVnYWxGb290Tm90ZSgpIHtcbiAgICBpZiAobWlzYWdvLmdldCgnVEVSTVNfT0ZfU0VSVklDRV9VUkwnKSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxhIGhyZWY9e21pc2Fnby5nZXQoJ1RFUk1TX09GX1NFUlZJQ0VfVVJMJyl9XG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgIHtnZXR0ZXh0KFwiQnkgcmVnaXN0ZXJpbmcgeW91IGFncmVlIHRvIHNpdGUncyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cIil9XG4gICAgICA8L2E+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1kaWFsb2cgbW9kYWwtcmVnaXN0ZXJcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJSZWdpc3RlclwiKX08L2g0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJmb3JtLWhvcml6b250YWxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInR5cGVcIiBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319IC8+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHlcIj5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlVzZXJuYW1lXCIpfSBmb3I9XCJpZF91c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCJcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbj17dGhpcy5zdGF0ZS5lcnJvcnMudXNlcm5hbWV9PlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlkX3VzZXJuYW1lXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpZF91c2VybmFtZV9zdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCd1c2VybmFtZScpfVxuICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudXNlcm5hbWV9IC8+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIkUtbWFpbFwiKX0gZm9yPVwiaWRfZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiXG4gICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb249e3RoaXMuc3RhdGUuZXJyb3JzLmVtYWlsfT5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJpZF9lbWFpbFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiaWRfZW1haWxfc3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnZW1haWwnKX1cbiAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmVtYWlsfSAvPlxuICAgICAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJQYXNzd29yZFwiKX0gZm9yPVwiaWRfcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiXG4gICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb249e3RoaXMuc3RhdGUuZXJyb3JzLnBhc3N3b3JkfVxuICAgICAgICAgICAgICAgICAgICAgICBleHRyYT17PFBhc3N3b3JkU3RyZW5ndGggcGFzc3dvcmQ9e3RoaXMuc3RhdGUucGFzc3dvcmR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHM9e1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5lbWFpbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXX0gLz59ID5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGlkPVwiaWRfcGFzc3dvcmRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImlkX3Bhc3N3b3JkX3N0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5wYXNzd29yZH0gLz5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgICAgICB7Y2FwdGNoYS5jb21wb25lbnQoe1xuICAgICAgICAgICAgICBmb3JtOiB0aGlzLFxuICAgICAgICAgICAgICBsYWJlbENsYXNzOiBcImNvbC1zbS00XCIsXG4gICAgICAgICAgICAgIGNvbnRyb2xDbGFzczogXCJjb2wtc20tOFwiXG4gICAgICAgICAgICB9KX1cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICB7dGhpcy5nZXRMZWdhbEZvb3ROb3RlKCl9XG4gICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5XCIgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9PlxuICAgICAgICAgICAgICB7Z2V0dGV4dChcIlJlZ2lzdGVyIGFjY291bnRcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyQ29tcGxldGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRMZWFkKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmFjdGl2YXRpb24gPT09ICd1c2VyJykge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCIlKHVzZXJuYW1lKXMsIHlvdXIgYWNjb3VudCBoYXMgYmVlbiBjcmVhdGVkIGJ1dCB5b3UgbmVlZCB0byBhY3RpdmF0ZSBpdCBiZWZvcmUgeW91IHdpbGwgYmUgYWJsZSB0byBzaWduIGluLlwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuYWN0aXZhdGlvbiA9PT0gJ2FkbWluJykge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCIlKHVzZXJuYW1lKXMsIHlvdXIgYWNjb3VudCBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBib2FyZCBhZG1pbmlzdHJhdG9yIHdpbGwgaGF2ZSB0byBhY3RpdmF0ZSBpdCBiZWZvcmUgeW91IHdpbGwgYmUgYWJsZSB0byBzaWduIGluLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdWJzY3JpcHQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWN0aXZhdGlvbiA9PT0gJ3VzZXInKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIldlIGhhdmUgc2VudCBhbiBlLW1haWwgdG8gJShlbWFpbClzIHdpdGggbGluayB0aGF0IHlvdSBoYXZlIHRvIGNsaWNrIHRvIGFjdGl2YXRlIHlvdXIgYWNjb3VudC5cIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmFjdGl2YXRpb24gPT09ICdhZG1pbicpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiV2Ugd2lsbCBzZW5kIGFuIGUtbWFpbCB0byAlKGVtYWlsKXMgd2hlbiB0aGlzIHRha2VzIHBsYWNlLlwiKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWRpYWxvZyBtb2RhbC1tZXNzYWdlIG1vZGFsLXJlZ2lzdGVyXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJSZWdpc3RyYXRpb24gY29tcGxldGVcIil9PC9oND5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJsZWFkXCI+XG4gICAgICAgICAgICAgIHtpbnRlcnBvbGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmdldExlYWQoKSxcbiAgICAgICAgICAgICAgICB7J3VzZXJuYW1lJzogdGhpcy5wcm9wcy51c2VybmFtZX0sIHRydWUpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIHtpbnRlcnBvbGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN1YnNjcmlwdCgpLFxuICAgICAgICAgICAgICAgIHsnZW1haWwnOiB0aGlzLnByb3BzLmVtYWlsfSwgdHJ1ZSl9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnY29tcGxldGUnOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGNvbXBsZXRlUmVnaXN0cmF0aW9uID0gKGFwaVJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKGFwaVJlc3BvbnNlLmFjdGl2YXRpb24gPT09ICdhY3RpdmUnKSB7XG4gICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICBhdXRoLnNpZ25JbihhcGlSZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnY29tcGxldGUnOiBhcGlSZXNwb25zZVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgaWYgKHRoaXMuc3RhdGUuY29tcGxldGUpIHtcbiAgICAgIHJldHVybiA8UmVnaXN0ZXJDb21wbGV0ZSBhY3RpdmF0aW9uPXt0aGlzLnN0YXRlLmNvbXBsZXRlLmFjdGl2YXRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU9e3RoaXMuc3RhdGUuY29tcGxldGUudXNlcm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw9e3RoaXMuc3RhdGUuY29tcGxldGUuZW1haWx9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gPFJlZ2lzdGVyRm9ybSBjYWxsYmFjaz17dGhpcy5jb21wbGV0ZVJlZ2lzdHJhdGlvbn0vPjtcbiAgICB9XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvcm0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCAqIGFzIHZhbGlkYXRvcnMgZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHNob3dCYW5uZWRQYWdlIGZyb20gJ21pc2Fnby91dGlscy9iYW5uZWQtcGFnZSc7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0TGlua0Zvcm0gZXh0ZW5kcyBGb3JtIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlLFxuXG4gICAgICAnZW1haWwnOiAnJyxcblxuICAgICAgJ3ZhbGlkYXRvcnMnOiB7XG4gICAgICAgICdlbWFpbCc6IFtcbiAgICAgICAgICB2YWxpZGF0b3JzLmVtYWlsKClcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiRW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLlwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gYWpheC5wb3N0KG1pc2Fnby5nZXQoJ1NFTkRfQUNUSVZBVElPTl9BUEknKSwge1xuICAgICAgJ2VtYWlsJzogdGhpcy5zdGF0ZS5lbWFpbFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VjY2VzcyhhcGlSZXNwb25zZSkge1xuICAgIHRoaXMucHJvcHMuY2FsbGJhY2soYXBpUmVzcG9uc2UpO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IocmVqZWN0aW9uKSB7XG4gICAgaWYgKFsnYWxyZWFkeV9hY3RpdmUnLCAnaW5hY3RpdmVfYWRtaW4nXS5pbmRleE9mKHJlamVjdGlvbi5jb2RlKSA+IC0xKSB7XG4gICAgICBzbmFja2Jhci5pbmZvKHJlamVjdGlvbi5kZXRhaWwpO1xuICAgIH0gZWxzZSBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDAzICYmIHJlamVjdGlvbi5iYW4pIHtcbiAgICAgIHNob3dCYW5uZWRQYWdlKHJlamVjdGlvbi5iYW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwid2VsbCB3ZWxsLWZvcm0gd2VsbC1mb3JtLXJlcXVlc3QtYWN0aXZhdGlvbi1saW5rXCI+XG4gICAgICA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRyb2wtaW5wdXRcIj5cblxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17Z2V0dGV4dChcIllvdXIgZS1tYWlsIGFkZHJlc3NcIil9XG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnZW1haWwnKX1cbiAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5lbWFpbH0gLz5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiU2VuZCBsaW5rXCIpfVxuICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaW5rU2VudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldE1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCJBY3RpdmF0aW9uIGxpbmsgd2FzIHNlbnQgdG8gJShlbWFpbClzXCIpLCB7XG4gICAgICBlbWFpbDogdGhpcy5wcm9wcy51c2VyLmVtYWlsXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIndlbGwgd2VsbC1mb3JtIHdlbGwtZm9ybS1yZXF1ZXN0LWFjdGl2YXRpb24tbGluayB3ZWxsLWRvbmVcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZG9uZS1tZXNzYWdlXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgY2hlY2tcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAge3RoaXMuZ2V0TWVzc2FnZSgpfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMuY2FsbGJhY2t9PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiUmVxdWVzdCBhbm90aGVyIGxpbmtcIil9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjb21wbGV0ZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjb21wbGV0ZSA9IChhcGlSZXNwb25zZSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29tcGxldGU6IGFwaVJlc3BvbnNlXG4gICAgfSk7XG4gIH07XG5cbiAgcmVzZXQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb21wbGV0ZTogZmFsc2VcbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGlmICh0aGlzLnN0YXRlLmNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gPExpbmtTZW50IHVzZXI9e3RoaXMuc3RhdGUuY29tcGxldGV9IGNhbGxiYWNrPXt0aGlzLnJlc2V0fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxSZXF1ZXN0TGlua0Zvcm0gY2FsbGJhY2s9e3RoaXMuY29tcGxldGV9IC8+O1xuICAgIH07XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgKiBhcyB2YWxpZGF0b3JzIGZyb20gJ21pc2Fnby91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCBzaG93QmFubmVkUGFnZSBmcm9tICdtaXNhZ28vdXRpbHMvYmFubmVkLXBhZ2UnO1xuXG5leHBvcnQgY2xhc3MgUmVxdWVzdFJlc2V0Rm9ybSBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG5cbiAgICAgICdlbWFpbCc6ICcnLFxuXG4gICAgICAndmFsaWRhdG9ycyc6IHtcbiAgICAgICAgJ2VtYWlsJzogW1xuICAgICAgICAgIHZhbGlkYXRvcnMuZW1haWwoKVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJFbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QobWlzYWdvLmdldCgnU0VORF9QQVNTV09SRF9SRVNFVF9BUEknKSwge1xuICAgICAgJ2VtYWlsJzogdGhpcy5zdGF0ZS5lbWFpbFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VjY2VzcyhhcGlSZXNwb25zZSkge1xuICAgIHRoaXMucHJvcHMuY2FsbGJhY2soYXBpUmVzcG9uc2UpO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IocmVqZWN0aW9uKSB7XG4gICAgaWYgKFsnaW5hY3RpdmVfdXNlcicsICdpbmFjdGl2ZV9hZG1pbiddLmluZGV4T2YocmVqZWN0aW9uLmNvZGUpID4gLTEpIHtcbiAgICAgIHRoaXMucHJvcHMuc2hvd0luYWN0aXZlUGFnZShyZWplY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDAzICYmIHJlamVjdGlvbi5iYW4pIHtcbiAgICAgIHNob3dCYW5uZWRQYWdlKHJlamVjdGlvbi5iYW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwid2VsbCB3ZWxsLWZvcm0gd2VsbC1mb3JtLXJlcXVlc3QtcGFzc3dvcmQtcmVzZXRcIj5cbiAgICAgIDxmb3JtIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udHJvbC1pbnB1dFwiPlxuXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtnZXR0ZXh0KFwiWW91ciBlLW1haWwgYWRkcmVzc1wiKX1cbiAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdlbWFpbCcpfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmVtYWlsfSAvPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXByaW1hcnkgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ30+XG4gICAgICAgICAge2dldHRleHQoXCJTZW5kIGxpbmtcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmtTZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0TWVzc2FnZSgpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIlJlc2V0IHBhc3N3b3JkIGxpbmsgd2FzIHNlbnQgdG8gJShlbWFpbClzXCIpLCB7XG4gICAgICBlbWFpbDogdGhpcy5wcm9wcy51c2VyLmVtYWlsXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIndlbGwgd2VsbC1mb3JtIHdlbGwtZm9ybS1yZXF1ZXN0LXBhc3N3b3JkLXJlc2V0IHdlbGwtZG9uZVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJkb25lLW1lc3NhZ2VcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWljb25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBjaGVja1xuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICB7dGhpcy5nZXRNZXNzYWdlKCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5jYWxsYmFja30+XG4gICAgICAgICAge2dldHRleHQoXCJSZXF1ZXN0IGFub3RoZXIgbGlua1wiKX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWNjb3VudEluYWN0aXZlUGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEFjdGl2YXRlQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmFjdGl2YXRpb24gPT09ICdpbmFjdGl2ZV91c2VyJykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxwPlxuICAgICAgICA8YSBocmVmPXttaXNhZ28uZ2V0KCdSRVFVRVNUX0FDVElWQVRJT05fVVJMJyl9PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiQWN0aXZhdGUgeW91ciBhY2NvdW50LlwiKX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9wPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFnZSBwYWdlLW1lc3NhZ2UgcGFnZS1tZXNzYWdlLWluZm8gcGFnZS1mb3Jnb3R0ZW4tcGFzc3dvcmQtaW5hY3RpdmVcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1wYW5lbFwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWljb25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgICAgaW5mb19vdXRsaW5lXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgICAgICB7Z2V0dGV4dChcIllvdXIgYWNjb3VudCBpcyBpbmFjdGl2ZS5cIil9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIHt0aGlzLmdldEFjdGl2YXRlQnV0dG9uKCl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbXBsZXRlOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGNvbXBsZXRlID0gKGFwaVJlc3BvbnNlKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb21wbGV0ZTogYXBpUmVzcG9uc2VcbiAgICB9KTtcbiAgfTtcblxuICByZXNldCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbXBsZXRlOiBmYWxzZVxuICAgIH0pO1xuICB9O1xuXG4gIHNob3dJbmFjdGl2ZVBhZ2UoYXBpUmVzcG9uc2UpIHtcbiAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICA8QWNjb3VudEluYWN0aXZlUGFnZSBhY3RpdmF0aW9uPXthcGlSZXNwb25zZS5jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17YXBpUmVzcG9uc2UuZGV0YWlsfSAvPixcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLW1vdW50JylcbiAgICApO1xuICB9XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICBpZiAodGhpcy5zdGF0ZS5jb21wbGV0ZSkge1xuICAgICAgcmV0dXJuIDxMaW5rU2VudCB1c2VyPXt0aGlzLnN0YXRlLmNvbXBsZXRlfSBjYWxsYmFjaz17dGhpcy5yZXNldH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8UmVxdWVzdFJlc2V0Rm9ybSBjYWxsYmFjaz17dGhpcy5jb21wbGV0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93SW5hY3RpdmVQYWdlPXt0aGlzLnNob3dJbmFjdGl2ZVBhZ2V9IC8+O1xuICAgIH07XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IFNpZ25Jbk1vZGFsIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3NpZ24taW4uanMnO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IGF1dGggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2F1dGgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtb2RhbCBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9kYWwnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgKiBhcyB2YWxpZGF0b3JzIGZyb20gJ21pc2Fnby91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCBzaG93QmFubmVkUGFnZSBmcm9tICdtaXNhZ28vdXRpbHMvYmFubmVkLXBhZ2UnO1xuXG5leHBvcnQgY2xhc3MgUmVzZXRQYXNzd29yZEZvcm0gZXh0ZW5kcyBGb3JtIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlLFxuXG4gICAgICAncGFzc3dvcmQnOiAnJyxcblxuICAgICAgJ3ZhbGlkYXRvcnMnOiB7XG4gICAgICAgICdwYXNzd29yZCc6IFtcbiAgICAgICAgICB2YWxpZGF0b3JzLnBhc3N3b3JkTWluTGVuZ3RoKG1pc2Fnby5nZXQoJ1NFVFRJTkdTJykpXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuc3RhdGUucGFzc3dvcmQudHJpbSgpLmxlbmd0aCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcih0aGlzLnN0YXRlLmVycm9ycy5wYXNzd29yZFswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiRW50ZXIgbmV3IHBhc3N3b3JkLlwiKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gYWpheC5wb3N0KG1pc2Fnby5nZXQoJ0NIQU5HRV9QQVNTV09SRF9BUEknKSwge1xuICAgICAgJ3Bhc3N3b3JkJzogdGhpcy5zdGF0ZS5wYXNzd29yZFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VjY2VzcyhhcGlSZXNwb25zZSkge1xuICAgIHRoaXMucHJvcHMuY2FsbGJhY2soYXBpUmVzcG9uc2UpO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IocmVqZWN0aW9uKSB7XG4gICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMyAmJiByZWplY3Rpb24uYmFuKSB7XG4gICAgICBzaG93QmFubmVkUGFnZShyZWplY3Rpb24uYmFuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hY2tiYXIuYXBpRXJyb3IocmVqZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIndlbGwgd2VsbC1mb3JtIHdlbGwtZm9ybS1yZXNldC1wYXNzd29yZFwiPlxuICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250cm9sLWlucHV0XCI+XG5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtnZXR0ZXh0KFwiRW50ZXIgbmV3IHBhc3N3b3JkXCIpfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGFzc3dvcmR9IC8+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeSBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICB7Z2V0dGV4dChcIkNoYW5nZSBwYXNzd29yZFwiKX1cbiAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRDaGFuZ2VkUGFnZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldE1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMsIHlvdXIgcGFzc3dvcmQgaGFzIGJlZW4gY2hhbmdlZCBzdWNjZXNzZnVsbHkuXCIpLCB7XG4gICAgICB1c2VybmFtZTogdGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICBzaG93U2lnbkluKCkge1xuICAgIG1vZGFsLnNob3coU2lnbkluTW9kYWwpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwYWdlIHBhZ2UtbWVzc2FnZSBwYWdlLW1lc3NhZ2Utc3VjY2VzcyBwYWdlLWZvcmdvdHRlbi1wYXNzd29yZC1jaGFuZ2VkXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtcGFuZWxcIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgIGNoZWNrXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgICAgICB7dGhpcy5nZXRNZXNzYWdlKCl9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJZb3Ugd2lsbCBoYXZlIHRvIHNpZ24gaW4gdXNpbmcgbmV3IHBhc3N3b3JkIGJlZm9yZSBjb250aW51aW5nLlwiKX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnlcIiBvbkNsaWNrPXt0aGlzLnNob3dTaWduSW59PlxuICAgICAgICAgICAgICAgIHtnZXR0ZXh0KFwiU2lnbiBpblwiKX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgY29tcGxldGUgPSAoYXBpUmVzcG9uc2UpID0+IHtcbiAgICBhdXRoLnNvZnRTaWduT3V0KCk7XG5cbiAgICAvLyBudWtlIFwicmVkaXJlY3RfdG9cIiBmaWVsZCBzbyB3ZSBkb24ndCBlbmRcbiAgICAvLyBjb21pbmcgYmFjayB0byBlcnJvciBwYWdlIGFmdGVyIHNpZ24gaW5cbiAgICAkKCcjaGlkZGVuLWxvZ2luLWZvcm0gaW5wdXRbbmFtZT1cInJlZGlyZWN0X3RvXCJdJykucmVtb3ZlKCk7XG5cbiAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICA8UGFzc3dvcmRDaGFuZ2VkUGFnZSB1c2VyPXthcGlSZXNwb25zZX0gLz4sXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS1tb3VudCcpXG4gICAgKTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8UmVzZXRQYXNzd29yZEZvcm0gY2FsbGJhY2s9e3RoaXMuY29tcGxldGV9IC8+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldENob2ljZSgpIHtcbiAgICBsZXQgY2hvaWNlID0gbnVsbDtcbiAgICB0aGlzLnByb3BzLmNob2ljZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS52YWx1ZSA9PT0gdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICBjaG9pY2UgPSBpdGVtO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaG9pY2U7XG4gIH1cblxuICBnZXRJY29uKCkge1xuICAgIHJldHVybiB0aGlzLmdldENob2ljZSgpLmljb247XG4gIH1cblxuICBnZXRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2UoKS5sYWJlbDtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgY2hhbmdlID0gKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25DaGFuZ2Uoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJ0bi1ncm91cCBidG4tc2VsZWN0LWdyb3VwXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXNlbGVjdCBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZCB8fCBudWxsfVxuICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10gfHwgbnVsbH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWQgfHwgZmFsc2V9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAge3RoaXMuZ2V0SWNvbigpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLmdldExhYmVsKCl9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgICAgIHt0aGlzLnByb3BzLmNob2ljZXMubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e2l9PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmNoYW5nZShpdGVtLnZhbHVlKX0+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgICAgICB7aXRlbS5pY29ufVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIHtpdGVtLmxhYmVsfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9saT47XG4gICAgICAgIH0pfVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IG1vZGFsIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2RhbCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCBzaG93QmFubmVkUGFnZSBmcm9tICdtaXNhZ28vdXRpbHMvYmFubmVkLXBhZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG4gICAgICAnc2hvd0FjdGl2YXRpb24nOiBmYWxzZSxcblxuICAgICAgJ3VzZXJuYW1lJzogJycsXG4gICAgICAncGFzc3dvcmQnOiAnJyxcblxuICAgICAgJ3ZhbGlkYXRvcnMnOiB7XG4gICAgICAgICd1c2VybmFtZSc6IFtdLFxuICAgICAgICAncGFzc3dvcmQnOiBbXVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiRmlsbCBvdXQgYm90aCBmaWVsZHMuXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gYWpheC5wb3N0KG1pc2Fnby5nZXQoJ0FVVEhfQVBJJyksIHtcbiAgICAgICd1c2VybmFtZSc6IHRoaXMuc3RhdGUudXNlcm5hbWUsXG4gICAgICAncGFzc3dvcmQnOiB0aGlzLnN0YXRlLnBhc3N3b3JkXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKCkge1xuICAgIGxldCBmb3JtID0gJCgnI2hpZGRlbi1sb2dpbi1mb3JtJyk7XG5cbiAgICBmb3JtLmFwcGVuZCgnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInVzZXJuYW1lXCIgLz4nKTtcbiAgICBmb3JtLmFwcGVuZCgnPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJwYXNzd29yZFwiIC8+Jyk7XG5cbiAgICAvLyBmaWxsIG91dCBmb3JtIHdpdGggdXNlciBjcmVkZW50aWFscyBhbmQgc3VibWl0IGl0LCB0aGlzIHdpbGwgdGVsbFxuICAgIC8vIE1pc2FnbyB0byByZWRpcmVjdCB1c2VyIGJhY2sgdG8gcmlnaHQgcGFnZSwgYW5kIHdpbGwgdHJpZ2dlciBicm93c2VyJ3NcbiAgICAvLyBrZXkgcmluZyBmZWF0dXJlXG4gICAgZm9ybS5maW5kKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdJykudmFsKGFqYXguZ2V0Q3NyZlRva2VuKCkpO1xuICAgIGZvcm0uZmluZCgnaW5wdXRbbmFtZT1cInJlZGlyZWN0X3RvXCJdJykudmFsKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgZm9ybS5maW5kKCdpbnB1dFtuYW1lPVwidXNlcm5hbWVcIl0nKS52YWwodGhpcy5zdGF0ZS51c2VybmFtZSk7XG4gICAgZm9ybS5maW5kKCdpbnB1dFtuYW1lPVwicGFzc3dvcmRcIl0nKS52YWwodGhpcy5zdGF0ZS5wYXNzd29yZCk7XG4gICAgZm9ybS5zdWJtaXQoKTtcblxuICAgIC8vIGtlZXAgZm9ybSBsb2FkaW5nXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAnaXNMb2FkaW5nJzogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IocmVqZWN0aW9uKSB7XG4gICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgaWYgKHJlamVjdGlvbi5jb2RlID09PSAnaW5hY3RpdmVfYWRtaW4nKSB7XG4gICAgICAgIHNuYWNrYmFyLmluZm8ocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGlvbi5jb2RlID09PSAnaW5hY3RpdmVfdXNlcicpIHtcbiAgICAgICAgc25hY2tiYXIuaW5mbyhyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgJ3Nob3dBY3RpdmF0aW9uJzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVqZWN0aW9uLmNvZGUgPT09ICdiYW5uZWQnKSB7XG4gICAgICAgIHNob3dCYW5uZWRQYWdlKHJlamVjdGlvbi5kZXRhaWwpO1xuICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMyAmJiByZWplY3Rpb24uYmFuKSB7XG4gICAgICBzaG93QmFubmVkUGFnZShyZWplY3Rpb24uYmFuKTtcbiAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hY2tiYXIuYXBpRXJyb3IocmVqZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBnZXRBY3RpdmF0aW9uQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLnNob3dBY3RpdmF0aW9uKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGEgaHJlZj17bWlzYWdvLmdldCgnUkVRVUVTVF9BQ1RJVkFUSU9OX1VSTCcpfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tc3VjY2VzcyBidG4tYmxvY2tcIj5cbiAgICAgICAgIHtnZXR0ZXh0KFwiQWN0aXZhdGUgYWNjb3VudFwiKX1cbiAgICAgIDwvYT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWRpYWxvZyBtb2RhbC1zbSBtb2RhbC1zaWduLWluXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJTaWduIGluXCIpfTwvaDQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250cm9sLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiaWRfdXNlcm5hbWVcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2dldHRleHQoXCJVc2VybmFtZSBvciBlLW1haWxcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgndXNlcm5hbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudXNlcm5hbWV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJpZF9wYXNzd29yZFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2dldHRleHQoXCJQYXNzd29yZFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdwYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5wYXNzd29yZH0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICB7dGhpcy5nZXRBY3RpdmF0aW9uQnV0dG9uKCl9XG4gICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJTaWduIGluXCIpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8YSBocmVmPXttaXNhZ28uZ2V0KCdGT1JHT1RURU5fUEFTU1dPUkRfVVJMJyl9XG4gICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrXCI+XG4gICAgICAgICAgICAgICB7Z2V0dGV4dChcIkZvcmdvdCBwYXNzd29yZD9cIil9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5jb25zdCBUWVBFU19DTEFTU0VTID0ge1xuICAnaW5mbyc6ICdhbGVydC1pbmZvJyxcbiAgJ3N1Y2Nlc3MnOiAnYWxlcnQtc3VjY2VzcycsXG4gICd3YXJuaW5nJzogJ2FsZXJ0LXdhcm5pbmcnLFxuICAnZXJyb3InOiAnYWxlcnQtZGFuZ2VyJ1xufTtcbi8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbmV4cG9ydCBjbGFzcyBTbmFja2JhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldFNuYWNrYmFyQ2xhc3MoKSB7XG4gICAgbGV0IHNuYWNrYmFyQ2xhc3MgPSAnYWxlcnRzLXNuYWNrYmFyJztcbiAgICBpZiAodGhpcy5wcm9wcy5pc1Zpc2libGUpIHtcbiAgICAgIHNuYWNrYmFyQ2xhc3MgKz0gJyBpbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyQ2xhc3MgKz0gJyBvdXQnO1xuICAgIH1cbiAgICByZXR1cm4gc25hY2tiYXJDbGFzcztcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldFNuYWNrYmFyQ2xhc3MoKX0+XG4gICAgICA8cCBjbGFzc05hbWU9eydhbGVydCAnICsgVFlQRVNfQ0xBU1NFU1t0aGlzLnByb3BzLnR5cGVdfT5cbiAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5zbmFja2Jhcjtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFJlZ2lzdGVyQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3JlZ2lzdGVyLWJ1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFNpZ25Jbk1vZGFsIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3NpZ24taW4uanMnO1xuaW1wb3J0IGRyb3Bkb3duIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2JpbGUtbmF2YmFyLWRyb3Bkb3duJztcbmltcG9ydCBtb2RhbCBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9kYWwnO1xuXG5leHBvcnQgY2xhc3MgR3Vlc3RNZW51IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc2hvd1NpZ25Jbk1vZGFsKCkge1xuICAgIG1vZGFsLnNob3coU2lnbkluTW9kYWwpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPHVsIGNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnUgdXNlci1kcm9wZG93biBkcm9wZG93bi1tZW51LXJpZ2h0XCJcbiAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCI+XG4gICAgICA8bGkgY2xhc3NOYW1lPVwiZ3Vlc3QtcHJldmlld1wiPlxuICAgICAgICA8aDQ+e2dldHRleHQoXCJZb3UgYXJlIGJyb3dzaW5nIGFzIGd1ZXN0LlwiKX08L2g0PlxuICAgICAgICA8cD5cbiAgICAgICAgICB7Z2V0dGV4dCgnU2lnbiBpbiBvciByZWdpc3RlciB0byBzdGFydCBhbmQgcGFydGljaXBhdGUgaW4gZGlzY3Vzc2lvbnMuJyl9XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC14cy02XCI+XG5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnNob3dTaWduSW5Nb2RhbH0+XG4gICAgICAgICAgICAgIHtnZXR0ZXh0KFwiU2lnbiBpblwiKX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wteHMtNlwiPlxuXG4gICAgICAgICAgICA8UmVnaXN0ZXJCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXByaW1hcnkgYnRuLWJsb2NrXCI+XG4gICAgICAgICAgICAgIHtnZXR0ZXh0KFwiUmVnaXN0ZXJcIil9XG4gICAgICAgICAgICA8L1JlZ2lzdGVyQnV0dG9uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHdWVzdE5hdiBleHRlbmRzIEd1ZXN0TWVudSB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibmF2IG5hdi1ndWVzdFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIG5hdmJhci1idG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnNob3dTaWduSW5Nb2RhbH0+XG4gICAgICAgIHtnZXR0ZXh0KFwiU2lnbiBpblwiKX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPFJlZ2lzdGVyQnV0dG9uIGNsYXNzTmFtZT1cIm5hdmJhci1idG4gYnRuLXByaW1hcnlcIj5cbiAgICAgICAge2dldHRleHQoXCJSZWdpc3RlclwiKX1cbiAgICAgIDwvUmVnaXN0ZXJCdXR0b24+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhY3RHdWVzdE5hdiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHNob3dHdWVzdE1lbnUoKSB7XG4gICAgZHJvcGRvd24uc2hvdyhHdWVzdE1lbnUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17dGhpcy5zaG93R3Vlc3RNZW51fT5cbiAgICAgIDxBdmF0YXIgc2l6ZT1cIjY0XCIgLz5cbiAgICA8L2J1dHRvbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEd1ZXN0TmF2LCBDb21wYWN0R3Vlc3ROYXYgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2VyLW1lbnUvZ3Vlc3QtbmF2JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgeyBVc2VyTmF2LCBDb21wYWN0VXNlck5hdn0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlci1tZW51L3VzZXItbmF2JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBVc2VyTWVudSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgaWYgKHRoaXMucHJvcHMuaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICByZXR1cm4gPFVzZXJOYXYgdXNlcj17dGhpcy5wcm9wcy51c2VyfSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxHdWVzdE5hdiAvPjtcbiAgICB9XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFjdFVzZXJNZW51IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICBpZiAodGhpcy5wcm9wcy5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHJldHVybiA8Q29tcGFjdFVzZXJOYXYgdXNlcj17dGhpcy5wcm9wcy51c2VyfSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxDb21wYWN0R3Vlc3ROYXYgLz47XG4gICAgfVxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUuYXV0aDtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IEF2YXRhciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9hdmF0YXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBDaGFuZ2VBdmF0YXJNb2RhbCwgeyBzZWxlY3QgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL3Jvb3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgZHJvcGRvd24gZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vYmlsZS1uYXZiYXItZHJvcGRvd24nO1xuaW1wb3J0IG1vZGFsIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2RhbCc7XG5cbmV4cG9ydCBjbGFzcyBVc2VyTWVudSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGxvZ291dCgpIHtcbiAgICBsZXQgZGVjaXNpb24gPSBjb25maXJtKGdldHRleHQoXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2lnbiBvdXQ/XCIpKTtcbiAgICBpZiAoZGVjaXNpb24pIHtcbiAgICAgICQoJyNoaWRkZW4tbG9nb3V0LWZvcm0nKS5zdWJtaXQoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VBdmF0YXIoKSB7XG4gICAgbW9kYWwuc2hvdyhjb25uZWN0KHNlbGVjdCkoQ2hhbmdlQXZhdGFyTW9kYWwpKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51IHVzZXItZHJvcGRvd24gZHJvcGRvd24tbWVudS1yaWdodFwiXG4gICAgICAgICAgICAgICByb2xlPVwibWVudVwiPlxuICAgICAgPGxpIGNsYXNzTmFtZT1cImRyb3Bkb3duLWhlYWRlclwiPlxuICAgICAgICA8c3Ryb25nPnt0aGlzLnByb3BzLnVzZXIudXNlcm5hbWV9PC9zdHJvbmc+XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzTmFtZT1cImRpdmlkZXJcIiAvPlxuICAgICAgPGxpPlxuICAgICAgICA8YSBocmVmPXt0aGlzLnByb3BzLnVzZXIuYWJzb2x1dGVfdXJsfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+YWNjb3VudF9jaXJjbGU8L3NwYW4+XG4gICAgICAgICAge2dldHRleHQoXCJTZWUgeW91ciBwcm9maWxlXCIpfVxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPlxuICAgICAgICA8YSBocmVmPXttaXNhZ28uZ2V0KCdVU0VSQ1BfVVJMJyl9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5kb25lX2FsbDwvc3Bhbj5cbiAgICAgICAgICB7Z2V0dGV4dChcIkNoYW5nZSBvcHRpb25zXCIpfVxuICAgICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4tbGlua1wiIG9uQ2xpY2s9e3RoaXMuY2hhbmdlQXZhdGFyfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+cG9ydHJhaXQ8L3NwYW4+XG4gICAgICAgICAge2dldHRleHQoXCJDaGFuZ2UgYXZhdGFyXCIpfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3NOYW1lPVwiZGl2aWRlclwiIC8+XG4gICAgICA8bGkgY2xhc3NOYW1lPVwiZHJvcGRvd24tZm9vdGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmxvZ291dH0+XG4gICAgICAgICAgICB7Z2V0dGV4dChcIkxvZyBvdXRcIil9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVzZXJOYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8dWwgY2xhc3NOYW1lPVwidWwgbmF2IG5hdmJhci1uYXYgbmF2LXVzZXJcIj5cbiAgICAgIDxsaSBjbGFzc05hbWU9XCJkcm9wZG93blwiPlxuICAgICAgICA8YSBocmVmPXt0aGlzLnByb3BzLnVzZXIuYWJzb2x1dGVfdXJsfSBjbGFzc05hbWU9XCJkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICByb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgPEF2YXRhciB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IHNpemU9XCI2NFwiIC8+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPFVzZXJNZW51IHVzZXI9e3RoaXMucHJvcHMudXNlcn0gLz5cbiAgICAgIDwvbGk+XG4gICAgPC91bD47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0VXNlck1lbnUoc3RhdGUpIHtcbiAgcmV0dXJuIHt1c2VyOiBzdGF0ZS5hdXRoLnVzZXJ9O1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFjdFVzZXJOYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzaG93VXNlck1lbnUoKSB7XG4gICAgZHJvcGRvd24uc2hvd0Nvbm5lY3RlZCgndXNlci1tZW51JywgY29ubmVjdChzZWxlY3RVc2VyTWVudSkoVXNlck1lbnUpKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuc2hvd1VzZXJNZW51fT5cbiAgICAgIDxBdmF0YXIgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzaXplPVwiNjRcIiAvPlxuICAgIDwvYnV0dG9uPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldENsYXNzKCkge1xuICAgIGxldCBzdGF0dXMgPSAnJztcbiAgICBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfYmFubmVkKSB7XG4gICAgICBzdGF0dXMgPSAnYmFubmVkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2hpZGRlbikge1xuICAgICAgc3RhdHVzID0gJ29mZmxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lX2hpZGRlbikge1xuICAgICAgc3RhdHVzID0gJ29ubGluZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lX2hpZGRlbikge1xuICAgICAgc3RhdHVzID0gJ29mZmxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lKSB7XG4gICAgICBzdGF0dXMgPSAnb25saW5lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29mZmxpbmUpIHtcbiAgICAgIHN0YXR1cyA9ICdvZmZsaW5lJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ3VzZXItc3RhdHVzIHVzZXItJyArIHN0YXR1cztcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzcygpfT5cbiAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgIDwvc3Bhbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RhdHVzSWNvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEljb24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2Jhbm5lZCkge1xuICAgICAgcmV0dXJuICdyZW1vdmVfY2lyY2xlX291dGxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gJ2hlbHBfb3V0bGluZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vbmxpbmVfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gJ2xhYmVsJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29mZmxpbmVfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gJ2xhYmVsX291dGxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lKSB7XG4gICAgICByZXR1cm4gJ2xlbnMnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb2ZmbGluZSkge1xuICAgICAgcmV0dXJuICdwYW5vcmFtYV9maXNoX2V5ZSc7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwic3RhdHVzLWljb25cIj5cbiAgICAgIHt0aGlzLmdldEljb24oKX1cbiAgICA8L3NwYW4+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxufVxuXG5leHBvcnQgY2xhc3MgU3RhdHVzTGFiZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRIZWxwKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19iYW5uZWQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnN0YXR1cy5iYW5uZWRfdW50aWwpIHtcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMgaXMgaGlkaW5nIGJhbm5lZCB1bnRpbCAlKGJhbl9leHBpcmVzKXNcIiksIHtcbiAgICAgICAgICB1c2VybmFtZTogdGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lLFxuICAgICAgICAgIGJhbl9leHBpcmVzOiB0aGlzLnByb3BzLnN0YXR1cy5iYW5uZWRfdW50aWwuZm9ybWF0KCdMTCwgTFQnKVxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiJSh1c2VybmFtZSlzIGlzIGhpZGluZyBiYW5uZWRcIiksIHtcbiAgICAgICAgICB1c2VybmFtZTogdGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyBpcyBoaWRpbmcgYWN0aXZpdHlcIiksIHtcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vbmxpbmVfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyBpcyBvbmxpbmUgKGhpZGRlbilcIiksIHtcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lX2hpZGRlbikge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMgd2FzIGxhc3Qgc2VlbiAlKGxhc3RfY2xpY2spcyAoaGlkZGVuKVwiKSwge1xuICAgICAgICB1c2VybmFtZTogdGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lLFxuICAgICAgICBsYXN0X2NsaWNrOiB0aGlzLnByb3BzLnN0YXRlLmxhc3RDbGljay5mcm9tTm93KClcbiAgICAgIH0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyBpcyBvbmxpbmVcIiksIHtcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyB3YXMgbGFzdCBzZWVuICUobGFzdF9jbGljaylzXCIpLCB7XG4gICAgICAgIHVzZXJuYW1lOiB0aGlzLnByb3BzLnVzZXIudXNlcm5hbWUsXG4gICAgICAgIGxhc3RfY2xpY2s6IHRoaXMucHJvcHMuc3RhdGUubGFzdENsaWNrLmZyb21Ob3coKVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TGFiZWwoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2Jhbm5lZCkge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJCYW5uZWRcIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19oaWRkZW4pIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiSGlkaW5nIGFjdGl2aXR5XCIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lX2hpZGRlbikge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJPbmxpbmUgKGhpZGRlbilcIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lX2hpZGRlbikge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJPZmZsaW5lIChoaWRkZW4pXCIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIk9ubGluZVwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29mZmxpbmUpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiT2ZmbGluZVwiKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9e3RoaXMucHJvcHMuY2xhc3NOYW1lIHx8IFwic3RhdHVzLWxhYmVsXCJ9XG4gICAgICAgICAgICAgICAgIHRpdGxlPXt0aGlzLmdldEhlbHAoKX0+XG4gICAgICB7dGhpcy5nZXRMYWJlbCgpfVxuICAgIDwvc3Bhbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFN0YXR1cywgeyBTdGF0dXNJY29uLCBTdGF0dXNMYWJlbCB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXItc3RhdHVzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgeyBkZWh5ZHJhdGUgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcnMnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgY2xhc3MgQWN0aXZlUG9zdGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJhbmsuY3NzX2NsYXNzKSB7XG4gICAgICByZXR1cm4gXCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1yYW5rLVwiICsgdGhpcy5wcm9wcy5yYW5rLmNzc19jbGFzcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwibGlzdC1ncm91cC1pdGVtXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0VXNlclN0YXR1cygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy51c2VyLnN0YXR1cykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxTdGF0dXMgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzdGF0dXM9e3RoaXMucHJvcHMudXNlci5zdGF0dXN9PlxuICAgICAgICA8U3RhdHVzSWNvbiB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cz17dGhpcy5wcm9wcy51c2VyLnN0YXR1c30gLz5cbiAgICAgICAgPFN0YXR1c0xhYmVsIHVzZXI9e3RoaXMucHJvcHMudXNlcn1cbiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz17dGhpcy5wcm9wcy51c2VyLnN0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN0YXR1cy1sYWJlbCBoaWRkZW4teHMgaGlkZGVuLXNtXCIgLz5cbiAgICAgIDwvU3RhdHVzPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLXN0YXR1c1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdGF0dXMtaWNvbiB1aS1wcmV2aWV3XCI+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3RhdHVzLWxhYmVsIHVpLXByZXZpZXcgaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICBnZXRSYW5rTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yYW5rLmlzX3RhYikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgbGV0IHJhbmtVcmwgPSBtaXNhZ28uZ2V0KCdVU0VSU19MSVNUX1VSTCcpICsgdGhpcy5wcm9wcy5yYW5rLnNsdWcgKyAnLyc7XG4gICAgICByZXR1cm4gPExpbmsgdG89e3JhbmtVcmx9IGNsYXNzTmFtZT1cInJhbmstbmFtZVwiPlxuICAgICAgICB7dGhpcy5wcm9wcy5yYW5rLm5hbWV9XG4gICAgICA8L0xpbms+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInJhbmstbmFtZVwiPlxuICAgICAgICB7dGhpcy5wcm9wcy5yYW5rLm5hbWV9XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICBnZXRVc2VyVGl0bGUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudXNlci50aXRsZSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItdGl0bGUgaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuICAgICAgICB7dGhpcy5wcm9wcy51c2VyLnRpdGxlfVxuICAgICAgPC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyYW5rLXVzZXItYXZhdGFyXCI+XG4gICAgICAgIDxhIGhyZWY9e3RoaXMucHJvcHMudXNlci5hYnNvbHV0ZV91cmx9PlxuICAgICAgICAgIDxBdmF0YXIgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzaXplPVwiNTBcIiAvPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyYW5rLXVzZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLW5hbWVcIj5cbiAgICAgICAgICA8YSBocmVmPXt0aGlzLnByb3BzLnVzZXIuYWJzb2x1dGVfdXJsfSBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lfVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldFVzZXJTdGF0dXMoKX1cbiAgICAgICAge3RoaXMuZ2V0UmFua05hbWUoKX1cbiAgICAgICAge3RoaXMuZ2V0VXNlclRpdGxlKCl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyYW5rLXBvc2l0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3RhdC12YWx1ZVwiPiN7dGhpcy5wcm9wcy5jb3VudGVyfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWRcIj57Z2V0dGV4dChcIlJhbmtcIil9PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyYW5rLXBvc3RzLWNvdW50ZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdGF0LXZhbHVlXCI+e3RoaXMucHJvcHMudXNlci5tZXRhLnNjb3JlfTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWRcIj57Z2V0dGV4dChcIlJhbmtlZCBwb3N0c1wiKX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhbmstcG9zdHMtdG90YWxcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdGF0LXZhbHVlXCI+e3RoaXMucHJvcHMudXNlci5wb3N0c308L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkXCI+e2dldHRleHQoXCJUb3RhbCBwb3N0c1wiKX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGl2ZVBvc3RlcnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRMZWFkTWVzc2FnZSgpIHtcbiAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICBcIiUocG9zdGVycylzIG1vc3QgYWN0aXZlIHBvc3RlciBmcm9tIGxhc3QgJShkYXlzKXMgZGF5cy5cIixcbiAgICAgICAgXCIlKHBvc3RlcnMpcyBtb3N0IGFjdGl2ZSBwb3N0ZXJzIGZyb20gbGFzdCAlKGRheXMpcyBkYXlzLlwiLFxuICAgICAgICB0aGlzLnByb3BzLmNvdW50KTtcblxuICAgIHJldHVybiBpbnRlcnBvbGF0ZShtZXNzYWdlLCB7XG4gICAgICBwb3N0ZXJzOiB0aGlzLnByb3BzLmNvdW50LFxuICAgICAgZGF5czogdGhpcy5wcm9wcy50cmFja2VkUGVyaW9kXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImFjdGl2ZS1wb3N0ZXJzLWxpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWRcIj5cbiAgICAgICAgICB7dGhpcy5nZXRMZWFkTWVzc2FnZSgpfVxuICAgICAgICA8L3A+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY3RpdmUtcG9zdGVycyB1aS1yZWFkeVwiPlxuICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy51c2Vycy5tYXAoKHVzZXIsIGkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIDxBY3RpdmVQb3N0ZXIgdXNlcj17dXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuaz17dXNlci5yYW5rfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyPXtpICsgMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXt1c2VyLmlkfSAvPjtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGl2ZVBvc3RlcnNMb2FkaW5nIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJhY3RpdmUtcG9zdGVycy1saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICBUaGlzIGlzIFVJIHByZXZpZXchXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9BY3RpdmVQb3N0ZXJzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0RW1wdHlNZXNzYWdlKCkge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZShcbiAgICAgIGdldHRleHQoXCJObyB1c2VycyBoYXZlIHBvc3RlZCBhbnkgbmV3IG1lc3NhZ2VzIGR1cmluZyBsYXN0ICUoZGF5cylzIGRheXMuXCIpLFxuICAgICAgeydkYXlzJzogdGhpcy5wcm9wcy50cmFja2VkUGVyaW9kfSwgdHJ1ZSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImFjdGl2ZS1wb3N0ZXJzLWxpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWRcIj5cbiAgICAgICAgICB7dGhpcy5nZXRFbXB0eU1lc3NhZ2UoKX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIGlmIChtaXNhZ28uaGFzKCdVU0VSUycpKSB7XG4gICAgICB0aGlzLmluaXRXaXRoUHJlbG9hZGVkRGF0YShtaXNhZ28ucG9wKCdVU0VSUycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0V2l0aG91dFByZWxvYWRlZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBpbml0V2l0aFByZWxvYWRlZERhdGEoZGF0YSkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0xvYWRlZDogdHJ1ZSxcblxuICAgICAgdHJhY2tlZFBlcmlvZDogZGF0YS50cmFja2VkX3BlcmlvZCxcbiAgICAgIGNvdW50OiBkYXRhLmNvdW50XG4gICAgfTtcblxuICAgIHN0b3JlLmRpc3BhdGNoKGRlaHlkcmF0ZShkYXRhLnJlc3VsdHMpKTtcbiAgfVxuXG4gIGluaXRXaXRob3V0UHJlbG9hZGVkRGF0YSgpIHtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNMb2FkZWQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRpdGxlLnNldCh7XG4gICAgICB0aXRsZTogdGhpcy5wcm9wcy5yb3V0ZS5leHRyYS5uYW1lLFxuICAgICAgcGFyZW50OiBnZXR0ZXh0KFwiVXNlcnNcIilcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRlZCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuY291bnQgPiAwKSB7XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgICAgcmV0dXJuIDxBY3RpdmVQb3N0ZXJzIHVzZXJzPXt0aGlzLnByb3BzLnVzZXJzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tlZFBlcmlvZD17dGhpcy5zdGF0ZS50cmFja2VkUGVyaW9kfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9e3RoaXMuc3RhdGUuY291bnR9IC8+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPE5vQWN0aXZlUG9zdGVycyB0cmFja2VkUGVyaW9kPXt0aGlzLnN0YXRlLnRyYWNrZWRQZXJpb2R9IC8+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPEFjdGl2ZVBvc3RlcnNMb2FkaW5nIC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExpIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2xpJzsgLy9qc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JzsgLy9qc2hpbnQgaWdub3JlOmxpbmVcblxuLy8ganNoaW50IGlnbm9yZTpzdGFydFxubGV0IGxpc3RVcmwgPSBmdW5jdGlvbihiYXNlVXJsLCBsaXN0KSB7XG4gIGxldCB1cmwgPSBiYXNlVXJsO1xuICBpZiAobGlzdC5jb21wb25lbnQgPT09ICdyYW5rJykge1xuICAgIHVybCArPSBsaXN0LnNsdWc7XG4gIH0gZWxzZSB7XG4gICAgdXJsICs9IGxpc3QuY29tcG9uZW50O1xuICB9XG4gIHJldHVybiB1cmwgKyAnLyc7XG59O1xuXG5sZXQgbmF2TGlua3MgPSBmdW5jdGlvbihiYXNlVXJsLCBsaXN0cykge1xuICAgIHJldHVybiBsaXN0cy5tYXAoZnVuY3Rpb24obGlzdCkge1xuICAgICAgbGV0IHVybCA9IGxpc3RVcmwoYmFzZVVybCwgbGlzdCk7XG4gICAgICByZXR1cm4gPExpIHBhdGg9e3VybH1cbiAgICAgICAgICAgICAgICAga2V5PXt1cmx9PlxuICAgICAgICA8TGluayB0bz17dXJsfT5cbiAgICAgICAgICB7bGlzdC5uYW1lfVxuICAgICAgICA8L0xpbms+XG4gICAgICA8L0xpPjtcbiAgfSk7XG59O1xuLy8ganNoaW50IGlnbm9yZTplbmRcblxuZXhwb3J0IGNsYXNzIFRhYnNOYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLy8ganNoaW50IGlnbm9yZTpzdGFydFxuICAgIHJldHVybiA8dWwgY2xhc3NOYW1lPVwibmF2IG5hdi1waWxsc1wiPlxuICAgICAge25hdkxpbmtzKHRoaXMucHJvcHMuYmFzZVVybCwgdGhpcy5wcm9wcy5saXN0cyl9XG4gICAgPC91bD47XG4gICAgLy8ganNoaW50IGlnbm9yZTplbmRcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFjdE5hdiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG4gICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cbiAgICAgIHtuYXZMaW5rcyh0aGlzLnByb3BzLmJhc2VVcmwsIHRoaXMucHJvcHMubGlzdHMpfVxuICAgIDwvdWw+O1xuICAgIC8vIGpzaGludCBpZ25vcmU6ZW5kXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aXRsZS5zZXQoe1xuICAgICAgdGl0bGU6IHRoaXMucHJvcHMucm91dGUucmFuay5uYW1lLFxuICAgICAgcGFyZW50OiBnZXR0ZXh0KFwiVXNlcnNcIilcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgIEhlbGxvLCB0aGlzIGlzIHVzZXJzIHdpdGggcmFuayBsaXN0IVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IFRhYnNOYXYsIENvbXBhY3ROYXYgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9uYXZzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQWN0aXZlUG9zdGVycyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9hY3RpdmUtcG9zdGVycyc7XG5pbXBvcnQgUmFuayBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9yYW5rJztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBkcm9wZG93bjogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICB0b2dnbGVOYXYgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZHJvcGRvd24pIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkcm9wZG93bjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJvcGRvd246IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBnZXRUb2dnbGVOYXZDbGFzc05hbWUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZHJvcGRvd24pIHtcbiAgICAgIHJldHVybiAnYnRuIGJ0bi1kZWZhdWx0IGJ0bi1pY29uIG9wZW4nO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ2J0biBidG4tZGVmYXVsdCBidG4taWNvbic7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29tcGFjdE5hdkNsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5kcm9wZG93bikge1xuICAgICAgcmV0dXJuICdjb21wYWN0LW5hdiBvcGVuJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdjb21wYWN0LW5hdic7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwYWdlIHBhZ2UtdXNlcnMtbGlzdHNcIj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYWdlLWhlYWRlciB0YWJiZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cblxuICAgICAgICAgIDxoMT57Z2V0dGV4dChcIlVzZXJzXCIpfTwvaDE+XG5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBidG4taWNvbiBidG4tZHJvcGRvd24tdG9nZ2xlIGhpZGRlbi1tZCBoaWRkZW4tbGdcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnRvZ2dsZU5hdn1cbiAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e3RoaXMuc3RhdGUuZHJvcGRvd24gPyAndHJ1ZScgOiAnZmFsc2UnfT5cbiAgICAgICAgICAgIDxpIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgICAgbWVudVxuICAgICAgICAgICAgPC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UtdGFicyBoaWRkZW4teHMgaGlkZGVuLXNtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cblxuICAgICAgICAgICAgPFRhYnNOYXYgbGlzdHM9e21pc2Fnby5nZXQoJ1VTRVJTX0xJU1RTJyl9XG4gICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXttaXNhZ28uZ2V0KCdVU0VSU19MSVNUX1VSTCcpfSAvPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDb21wYWN0TmF2Q2xhc3NOYW1lKCl9PlxuXG4gICAgICAgIDxDb21wYWN0TmF2IGxpc3RzPXttaXNhZ28uZ2V0KCdVU0VSU19MSVNUUycpfVxuICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXttaXNhZ28uZ2V0KCdVU0VSU19MSVNUX1VSTCcpfSAvPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0b3JlKSB7XG4gIHJldHVybiB7XG4gICAgJ3RpY2snOiBzdG9yZS50aWNrLnRpY2ssXG4gICAgJ3VzZXInOiBzdG9yZS5hdXRoLnVzZXIsXG4gICAgJ3VzZXJzJzogc3RvcmUudXNlcnNcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzKCkge1xuICBsZXQgcGF0aHMgPSBbXTtcblxuICBtaXNhZ28uZ2V0KCdVU0VSU19MSVNUUycpLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgIGlmIChpdGVtLmNvbXBvbmVudCA9PT0gJ3JhbmsnKSB7XG4gICAgICBwYXRocy5wdXNoKHtcbiAgICAgICAgcGF0aDogbWlzYWdvLmdldCgnVVNFUlNfTElTVF9VUkwnKSArIGl0ZW0uc2x1ZyArICcvJyxcbiAgICAgICAgY29tcG9uZW50OiBjb25uZWN0KHNlbGVjdCkoUmFuayksXG4gICAgICAgIHJhbms6IHtcbiAgICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgc2x1ZzogaXRlbS5zbHVnLFxuICAgICAgICAgIGNzc19jbGFzczogaXRlbS5jc3NfY2xhc3MsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGl0ZW0uZGVzY3JpcHRpb25cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChpdGVtLmNvbXBvbmVudCA9PT0gJ2FjdGl2ZS1wb3N0ZXJzJyl7XG4gICAgICBwYXRocy5wdXNoKHtcbiAgICAgICAgcGF0aDogbWlzYWdvLmdldCgnVVNFUlNfTElTVF9VUkwnKSArIGl0ZW0uY29tcG9uZW50ICsgJy8nLFxuICAgICAgICBjb21wb25lbnQ6IGNvbm5lY3Qoc2VsZWN0KShBY3RpdmVQb3N0ZXJzKSxcbiAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICBuYW1lOiBpdGVtLm5hbWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGF0aHM7XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiYnRuIGJ0bi15ZXMtbm8gYnRuLXllcy1uby1vblwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJidG4gYnRuLXllcy1ubyBidG4teWVzLW5vLW9mZlwiO1xuICAgIH1cbiAgfVxuXG4gIGdldEljb24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmljb25PbiB8fCAnY2hlY2tfYm94JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaWNvbk9mZiB8fCAnY2hlY2tfYm94X291dGxpbmVfYmxhbmsnO1xuICAgIH1cbiAgfVxuXG4gIGdldExhYmVsKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5sYWJlbE9uIHx8IGdldHRleHQoXCJ5ZXNcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxhYmVsT2ZmIHx8IGdldHRleHQoXCJub1wiKTtcbiAgICB9XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHRvZ2dsZSA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKHtcbiAgICAgIHRhcmdldDoge1xuICAgICAgICB2YWx1ZTogIXRoaXMucHJvcHMudmFsdWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMudG9nZ2xlfVxuICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX1cbiAgICAgICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZCB8fCBudWxsfVxuICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RoaXMucHJvcHNbJ2FyaWEtZGVzY3JpYmVkYnknXSB8fCBudWxsfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnByb3BzLmRpc2FibGVkIHx8IGZhbHNlfT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAge3RoaXMuZ2V0SWNvbigpfVxuICAgICAgPC9zcGFuPlxuICAgICAge3RoaXMuZ2V0TGFiZWwoKX1cbiAgICA8L2J1dHRvbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBPcmRlcmVkTGlzdCBmcm9tICdtaXNhZ28vdXRpbHMvb3JkZXJlZC1saXN0JztcblxuZXhwb3J0IGNsYXNzIE1pc2FnbyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2luaXRpYWxpemVycyA9IFtdO1xuICAgIHRoaXMuX2NvbnRleHQgPSB7fTtcbiAgfVxuXG4gIGFkZEluaXRpYWxpemVyKGluaXRpYWxpemVyKSB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZXJzLnB1c2goe1xuICAgICAga2V5OiBpbml0aWFsaXplci5uYW1lLFxuXG4gICAgICBpdGVtOiBpbml0aWFsaXplci5pbml0aWFsaXplcixcblxuICAgICAgYWZ0ZXI6IGluaXRpYWxpemVyLmFmdGVyLFxuICAgICAgYmVmb3JlOiBpbml0aWFsaXplci5iZWZvcmVcbiAgICB9KTtcbiAgfVxuXG4gIGluaXQoY29udGV4dCkge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgdmFyIGluaXRPcmRlciA9IG5ldyBPcmRlcmVkTGlzdCh0aGlzLl9pbml0aWFsaXplcnMpLm9yZGVyZWRWYWx1ZXMoKTtcbiAgICBpbml0T3JkZXIuZm9yRWFjaChpbml0aWFsaXplciA9PiB7XG4gICAgICBpbml0aWFsaXplcih0aGlzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGNvbnRleHQgYWNjZXNzb3JzXG4gIGhhcyhrZXkpIHtcbiAgICByZXR1cm4gISF0aGlzLl9jb250ZXh0W2tleV07XG4gIH1cblxuICBnZXQoa2V5LCBmYWxsYmFjaykge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29udGV4dFtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsbGJhY2sgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHBvcChrZXkpIHtcbiAgICBpZiAodGhpcy5oYXMoa2V5KSkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5fY29udGV4dFtrZXldO1xuICAgICAgdGhpcy5fY29udGV4dFtrZXldID0gbnVsbDtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuLy8gY3JlYXRlICBzaW5nbGV0b25cbnZhciBtaXNhZ28gPSBuZXcgTWlzYWdvKCk7XG5cbi8vIGV4cG9zZSBpdCBnbG9iYWxseVxuZ2xvYmFsLm1pc2FnbyA9IG1pc2FnbztcblxuLy8gYW5kIGV4cG9ydCBpdCBmb3IgdGVzdHMgYW5kIHN0dWZmXG5leHBvcnQgZGVmYXVsdCBtaXNhZ287XG4iLCJpbXBvcnQgeyBVUERBVEVfQVZBVEFSLCBVUERBVEVfVVNFUk5BTUUgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcnMnO1xuXG5leHBvcnQgdmFyIGluaXRpYWxTdGF0ZSA9IHtcbiAgc2lnbmVkSW46IGZhbHNlLFxuICBzaWduZWRPdXQ6IGZhbHNlXG59O1xuXG5leHBvcnQgY29uc3QgUEFUQ0hfVVNFUiA9ICdQQVRDSF9VU0VSJztcbmV4cG9ydCBjb25zdCBTSUdOX0lOID0gJ1NJR05fSU4nO1xuZXhwb3J0IGNvbnN0IFNJR05fT1VUID0gJ1NJR05fT1VUJztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoVXNlcihwYXRjaCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFBBVENIX1VTRVIsXG4gICAgcGF0Y2hcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25Jbih1c2VyKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0lHTl9JTixcbiAgICB1c2VyXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaWduT3V0KHNvZnQ9ZmFsc2UpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBTSUdOX09VVCxcbiAgICBzb2Z0XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGF1dGgoc3RhdGU9aW5pdGlhbFN0YXRlLCBhY3Rpb249bnVsbCkge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBQQVRDSF9VU0VSOlxuICAgICAgICBsZXQgbmV3U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSk7XG4gICAgICAgIG5ld1N0YXRlLnVzZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS51c2VyLCBhY3Rpb24ucGF0Y2gpO1xuICAgICAgICByZXR1cm4gbmV3U3RhdGU7XG5cbiAgICBjYXNlIFNJR05fSU46XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgc2lnbmVkSW46IGFjdGlvbi51c2VyXG4gICAgICB9KTtcblxuICAgIGNhc2UgU0lHTl9PVVQ6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgaXNBbm9ueW1vdXM6IHRydWUsXG4gICAgICAgIHNpZ25lZE91dDogIWFjdGlvbi5zb2Z0XG4gICAgICB9KTtcblxuICAgIGNhc2UgVVBEQVRFX0FWQVRBUjpcbiAgICAgIGlmIChzdGF0ZS5pc0F1dGhlbnRpY2F0ZWQgJiYgc3RhdGUudXNlci5pZCA9PT0gYWN0aW9uLnVzZXJJZCkge1xuICAgICAgICBsZXQgbmV3U3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSk7XG4gICAgICAgIG5ld1N0YXRlLnVzZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS51c2VyLCB7XG4gICAgICAgICAgJ2F2YXRhcl9oYXNoJzogYWN0aW9uLmF2YXRhckhhc2hcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcblxuICAgIGNhc2UgVVBEQVRFX1VTRVJOQU1FOlxuICAgICAgaWYgKHN0YXRlLmlzQXV0aGVudGljYXRlZCAmJiBzdGF0ZS51c2VyLmlkID09PSBhY3Rpb24udXNlcklkKSB7XG4gICAgICAgIGxldCBuZXdTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKTtcbiAgICAgICAgbmV3U3RhdGUudXNlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnVzZXIsIHtcbiAgICAgICAgICB1c2VybmFtZTogYWN0aW9uLnVzZXJuYW1lLFxuICAgICAgICAgIHNsdWc6IGFjdGlvbi5zbHVnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG4iLCJleHBvcnQgdmFyIGluaXRpYWxTdGF0ZSA9IHtcbiAgdHlwZTogJ2luZm8nLFxuICBtZXNzYWdlOiAnJyxcbiAgaXNWaXNpYmxlOiBmYWxzZVxufTtcblxuZXhwb3J0IGNvbnN0IFNIT1dfU05BQ0tCQVIgPSAnU0hPV19TTkFDS0JBUic7XG5leHBvcnQgY29uc3QgSElERV9TTkFDS0JBUiA9ICdISURFX1NOQUNLQkFSJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dTbmFja2JhcihtZXNzYWdlLCB0eXBlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0hPV19TTkFDS0JBUixcbiAgICBtZXNzYWdlLFxuICAgIG1lc3NhZ2VUeXBlOiB0eXBlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWRlU25hY2tiYXIoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogSElERV9TTkFDS0JBUlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbmFja2JhcihzdGF0ZT1pbml0aWFsU3RhdGUsIGFjdGlvbj1udWxsKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0hPV19TTkFDS0JBUikge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBhY3Rpb24ubWVzc2FnZVR5cGUsXG4gICAgICBtZXNzYWdlOiBhY3Rpb24ubWVzc2FnZSxcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IEhJREVfU05BQ0tCQVIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwiZXhwb3J0IHZhciBpbml0aWFsU3RhdGUgPSB7XG4gIHRpY2s6IDBcbn07XG5cbmV4cG9ydCBjb25zdCBUSUNLID0gJ1RJQ0snO1xuXG5leHBvcnQgZnVuY3Rpb24gZG9UaWNrKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFRJQ0tcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGljayhzdGF0ZT1pbml0aWFsU3RhdGUsIGFjdGlvbj1udWxsKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gVElDSykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICB0aWNrOiBzdGF0ZS50aWNrICsgMVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgVVBEQVRFX0FWQVRBUiwgVVBEQVRFX1VTRVJOQU1FIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3VzZXJzJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5leHBvcnQgY29uc3QgQUREX05BTUVfQ0hBTkdFID0gJ0FERF9OQU1FX0NIQU5HRSc7XG5leHBvcnQgY29uc3QgREVIWURSQVRFX1JFU1VMVCA9ICdERUhZRFJBVEVfUkVTVUxUJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE5hbWVDaGFuZ2UoY2hhbmdlLCB1c2VyLCBjaGFuZ2VkQnkpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBRERfTkFNRV9DSEFOR0UsXG4gICAgY2hhbmdlLFxuICAgIHVzZXIsXG4gICAgY2hhbmdlZEJ5XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWh5ZHJhdGUoaXRlbXMpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBERUhZRFJBVEVfUkVTVUxULFxuICAgIGl0ZW1zOiBpdGVtc1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VybmFtZShzdGF0ZT1bXSwgYWN0aW9uPW51bGwpIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgQUREX05BTUVfQ0hBTkdFOlxuICAgICAgbGV0IG5ld1N0YXRlID0gc3RhdGUuc2xpY2UoKTtcbiAgICAgIG5ld1N0YXRlLnVuc2hpZnQoe1xuICAgICAgICBpZDogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksIC8vIGp1c3Qgc21hbGwgaGF4IGZvciBnZXR0aW5nIGlkXG4gICAgICAgIGNoYW5nZWRfYnk6IGFjdGlvbi5jaGFuZ2VkQnksXG4gICAgICAgIGNoYW5nZWRfYnlfdXNlcm5hbWU6IGFjdGlvbi5jaGFuZ2VkQnkudXNlcm5hbWUsXG4gICAgICAgIGNoYW5nZWRfb246IG1vbWVudCgpLFxuICAgICAgICBuZXdfdXNlcm5hbWU6IGFjdGlvbi5jaGFuZ2UudXNlcm5hbWUsXG4gICAgICAgIG9sZF91c2VybmFtZTogYWN0aW9uLnVzZXIudXNlcm5hbWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuXG4gICAgY2FzZSBERUhZRFJBVEVfUkVTVUxUOlxuICAgICAgcmV0dXJuIGFjdGlvbi5pdGVtcy5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwge1xuICAgICAgICAgIGNoYW5nZWRfb246IG1vbWVudChpdGVtLmNoYW5nZWRfb24pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBjYXNlIFVQREFURV9BVkFUQVI6XG4gICAgICByZXR1cm4gc3RhdGUubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pO1xuICAgICAgICBpZiAoaXRlbS5jaGFuZ2VkX2J5ICYmIGl0ZW0uY2hhbmdlZF9ieS5pZCA9PT0gYWN0aW9uLnVzZXJJZCkge1xuICAgICAgICAgIGl0ZW0uY2hhbmdlZF9ieSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0uY2hhbmdlZF9ieSwge1xuICAgICAgICAgICAgJ2F2YXRhcl9oYXNoJzogYWN0aW9uLmF2YXRhckhhc2hcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBpdGVtKTtcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBVUERBVEVfVVNFUk5BTUU6XG4gICAgICByZXR1cm4gc3RhdGUubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pO1xuICAgICAgICBpZiAoaXRlbS5jaGFuZ2VkX2J5ICYmIGl0ZW0uY2hhbmdlZF9ieS5pZCA9PT0gYWN0aW9uLnVzZXJJZCkge1xuICAgICAgICAgIGl0ZW0uY2hhbmdlZF9ieSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0uY2hhbmdlZF9ieSwge1xuICAgICAgICAgICAgJ3VzZXJuYW1lJzogYWN0aW9uLnVzZXJuYW1lLFxuICAgICAgICAgICAgJ3NsdWcnOiBhY3Rpb24uc2x1Z1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pO1xuICAgICAgfSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59IiwiZXhwb3J0IGNvbnN0IERFSFlEUkFURV9SRVNVTFQgPSAnREVIWURSQVRFX1JFU1VMVCc7XG5leHBvcnQgY29uc3QgVVBEQVRFX0FWQVRBUiA9ICdVUERBVEVfQVZBVEFSJztcbmV4cG9ydCBjb25zdCBVUERBVEVfVVNFUk5BTUUgPSAnVVBEQVRFX1VTRVJOQU1FJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlaHlkcmF0ZShpdGVtcykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IERFSFlEUkFURV9SRVNVTFQsXG4gICAgaXRlbXM6IGl0ZW1zXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBdmF0YXIodXNlciwgYXZhdGFySGFzaCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFVQREFURV9BVkFUQVIsXG4gICAgdXNlcklkOiB1c2VyLmlkLFxuICAgIGF2YXRhckhhc2hcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVVzZXJuYW1lKHVzZXIsIHVzZXJuYW1lLCBzbHVnKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogVVBEQVRFX1VTRVJOQU1FLFxuICAgIHVzZXJJZDogdXNlci5pZCxcbiAgICB1c2VybmFtZSxcbiAgICBzbHVnXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZXIoc3RhdGU9W10sIGFjdGlvbj1udWxsKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIERFSFlEUkFURV9SRVNVTFQ6XG4gICAgICByZXR1cm4gYWN0aW9uLml0ZW1zLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBpdGVtLCB7XG5cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn0iLCJleHBvcnQgY2xhc3MgQWpheCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2Nvb2tpZU5hbWUgPSBudWxsO1xuICAgIHRoaXMuX2NzcmZUb2tlbiA9IG51bGw7XG4gIH1cblxuICBpbml0KGNvb2tpZU5hbWUpIHtcbiAgICB0aGlzLl9jb29raWVOYW1lID0gY29va2llTmFtZTtcbiAgICB0aGlzLl9jc3JmVG9rZW4gPSB0aGlzLmdldENzcmZUb2tlbigpO1xuICB9XG5cbiAgZ2V0Q3NyZlRva2VuKCkge1xuICAgIGlmIChkb2N1bWVudC5jb29raWUuaW5kZXhPZih0aGlzLl9jb29raWVOYW1lKSAhPT0gLTEpIHtcbiAgICAgIGxldCBjb29raWVSZWdleCA9IG5ldyBSZWdFeHAodGhpcy5fY29va2llTmFtZSArICdcXD0oW147XSopJyk7XG4gICAgICBsZXQgY29va2llID0gZG9jdW1lbnQuY29va2llLm1hdGNoKGNvb2tpZVJlZ2V4KVswXTtcbiAgICAgIHJldHVybiBjb29raWUgPyBjb29raWUuc3BsaXQoJz0nKVsxXSA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlcXVlc3QobWV0aG9kLCB1cmwsIGRhdGEpIHtcbiAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgbGV0IHhociA9IHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ1gtQ1NSRlRva2VuJzogc2VsZi5fY3NyZlRva2VuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YTogKGRhdGEgPyBKU09OLnN0cmluZ2lmeShkYXRhKSA6IG51bGwpLFxuICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgIGRhdGFUeXBlOiAnanNvbicsXG5cbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxWEhSKSB7XG4gICAgICAgICAgbGV0IHJlamVjdGlvbiA9IGpxWEhSLnJlc3BvbnNlSlNPTiB8fCB7fTtcblxuICAgICAgICAgIHJlamVjdGlvbi5zdGF0dXMgPSBqcVhIUi5zdGF0dXM7XG5cbiAgICAgICAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgcmVqZWN0aW9uLmRldGFpbCA9IGdldHRleHQoXCJMb3N0IGNvbm5lY3Rpb24gd2l0aCBhcHBsaWNhdGlvbi5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVqZWN0aW9uLnN0YXR1c1RleHQgPSBqcVhIUi5zdGF0dXNUZXh0O1xuXG4gICAgICAgICAgcmVqZWN0KHJlamVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgICQuYWpheCh4aHIpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0KHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgdXJsICs9ICc/JyArICQucGFyYW0ocGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnR0VUJywgdXJsKTtcbiAgfVxuXG4gIHBvc3QodXJsLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUE9TVCcsIHVybCwgZGF0YSk7XG4gIH1cblxuICBwYXRjaCh1cmwsIGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQQVRDSCcsIHVybCwgZGF0YSk7XG4gIH1cblxuICBwdXQodXJsLCBkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnUFVUJywgdXJsLCBkYXRhKTtcbiAgfVxuXG4gIGRlbGV0ZSh1cmwpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdERUxFVEUnLCB1cmwpO1xuICB9XG5cbiAgdXBsb2FkKHVybCwgZGF0YSwgcHJvZ3Jlc3MpIHtcbiAgICBsZXQgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgbGV0IHhociA9IHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ1gtQ1NSRlRva2VuJzogc2VsZi5fY3NyZlRva2VuXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgY29udGVudFR5cGU6IGZhbHNlLFxuICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG5cbiAgICAgICAgeGhyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICBsZXQgeGhyID0gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgIHhoci51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcihcInByb2dyZXNzXCIsIGZ1bmN0aW9uKGV2dCkge1xuICAgICAgICAgICAgaWYgKGV2dC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgICAgICAgIHByb2dyZXNzKE1hdGgucm91bmQoZXZ0LmxvYWRlZCAvIGV2dC50b3RhbCAqIDEwMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIGZhbHNlKTtcbiAgICAgICAgICByZXR1cm4geGhyO1xuICAgICAgICB9LFxuXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGpxWEhSKSB7XG4gICAgICAgICAgbGV0IHJlamVjdGlvbiA9IGpxWEhSLnJlc3BvbnNlSlNPTiB8fCB7fTtcblxuICAgICAgICAgIHJlamVjdGlvbi5zdGF0dXMgPSBqcVhIUi5zdGF0dXM7XG5cbiAgICAgICAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgcmVqZWN0aW9uLmRldGFpbCA9IGdldHRleHQoXCJMb3N0IGNvbm5lY3Rpb24gd2l0aCBhcHBsaWNhdGlvbi5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVqZWN0aW9uLnN0YXR1c1RleHQgPSBqcVhIUi5zdGF0dXNUZXh0O1xuXG4gICAgICAgICAgcmVqZWN0KHJlamVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgICQuYWpheCh4aHIpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBBamF4KCk7XG4iLCJpbXBvcnQgeyBzaWduSW4sIHNpZ25PdXQgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvYXV0aCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgY2xhc3MgQXV0aCB7XG4gIGluaXQoc3RvcmUsIGxvY2FsLCBtb2RhbCkge1xuICAgIHRoaXMuX3N0b3JlID0gc3RvcmU7XG4gICAgdGhpcy5fbG9jYWwgPSBsb2NhbDtcbiAgICB0aGlzLl9tb2RhbCA9IG1vZGFsO1xuXG4gICAgLy8gdGVsbCBvdGhlciB0YWJzIHdoYXQgYXV0aCBzdGF0ZSBpcyBiZWNhdXNlIHdlIGFyZSBtb3N0IGN1cnJlbnQgd2l0aCBpdFxuICAgIHRoaXMuc3luY1Nlc3Npb24oKTtcblxuICAgIC8vIGxpc3RlbiBmb3Igb3RoZXIgdGFicyB0byB0ZWxsIHVzIHRoYXQgc3RhdGUgY2hhbmdlZFxuICAgIHRoaXMud2F0Y2hTdGF0ZSgpO1xuICB9XG5cbiAgc3luY1Nlc3Npb24oKSB7XG4gICAgbGV0IHN0YXRlID0gdGhpcy5fc3RvcmUuZ2V0U3RhdGUoKS5hdXRoO1xuICAgIGlmIChzdGF0ZS5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHRoaXMuX2xvY2FsLnNldCgnYXV0aCcsIHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAgICB1c2VybmFtZTogc3RhdGUudXNlci51c2VybmFtZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xvY2FsLnNldCgnYXV0aCcsIHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgd2F0Y2hTdGF0ZSgpIHtcbiAgICB0aGlzLl9sb2NhbC53YXRjaCgnYXV0aCcsIChuZXdTdGF0ZSkgPT4ge1xuICAgICAgaWYgKG5ld1N0YXRlLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChzaWduSW4oe1xuICAgICAgICAgIHVzZXJuYW1lOiBuZXdTdGF0ZS51c2VybmFtZVxuICAgICAgICB9KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChzaWduT3V0KCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX21vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIHNpZ25Jbih1c2VyKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goc2lnbkluKHVzZXIpKTtcbiAgICB0aGlzLl9sb2NhbC5zZXQoJ2F1dGgnLCB7XG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICB1c2VybmFtZTogdXNlci51c2VybmFtZVxuICAgIH0pO1xuICAgIHRoaXMuX21vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIHNpZ25PdXQoKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goc2lnbk91dCgpKTtcbiAgICB0aGlzLl9sb2NhbC5zZXQoJ2F1dGgnLCB7XG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlXG4gICAgfSk7XG4gICAgdGhpcy5fbW9kYWwuaGlkZSgpO1xuICB9XG5cbiAgc29mdFNpZ25PdXQoKSB7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goc2lnbk91dCh0cnVlKSk7XG4gICAgdGhpcy5fbG9jYWwuc2V0KCdhdXRoJywge1xuICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuX21vZGFsLmhpZGUoKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQXV0aCgpOyIsIi8qIGdsb2JhbCBncmVjYXB0Y2hhICovXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybS1ncm91cCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgY2xhc3MgQmFzZUNhcHRjaGEge1xuICBpbml0KGNvbnRleHQsIGFqYXgsIGluY2x1ZGUsIHNuYWNrYmFyKSB7XG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5fYWpheCA9IGFqYXg7XG4gICAgdGhpcy5faW5jbHVkZSA9IGluY2x1ZGU7XG4gICAgdGhpcy5fc25hY2tiYXIgPSBzbmFja2JhcjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9DYXB0Y2hhIGV4dGVuZHMgQmFzZUNhcHRjaGEge1xuICBsb2FkKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICAvLyBpbW1lZGlhdGVseSByZXNvbHZlIGFzIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gdmFsaWRhdGVcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUUFDYXB0Y2hhIGV4dGVuZHMgQmFzZUNhcHRjaGEge1xuICBsb2FkKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2VsZi5fYWpheC5nZXQoc2VsZi5fY29udGV4dC5nZXQoJ0NBUFRDSEFfQVBJX1VSTCcpKS50aGVuKFxuICAgICAgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICBzZWxmLnF1ZXN0aW9uID0gZGF0YS5xdWVzdGlvbjtcbiAgICAgICAgc2VsZi5oZWxwVGV4dCA9IGRhdGEuaGVscF90ZXh0O1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkZhaWxlZCB0byBsb2FkIENBUFRDSEEuXCIpKTtcbiAgICAgICAgcmVqZWN0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGNvbXBvbmVudChrd2FyZ3MpIHtcbiAgICByZXR1cm4gPEZvcm1Hcm91cCBsYWJlbD17dGhpcy5xdWVzdGlvbn0gZm9yPVwiaWRfY2FwdGNoYVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz17a3dhcmdzLmxhYmVsQ2xhc3MgfHwgXCJjb2wtc20tNFwifVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xDbGFzcz17a3dhcmdzLmNvbnRyb2xDbGFzcyB8fCBcImNvbC1zbS04XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbj17a3dhcmdzLmZvcm0uc3RhdGUuZXJyb3JzLmNhcHRjaGF9XG4gICAgICAgICAgICAgICAgICAgICAgaGVscFRleHQ9e3RoaXMuaGVscFRleHQgfHwgbnVsbH0+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlkX2NhcHRjaGFcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpZF9jYXB0Y2hhX3N0YXR1c1wiXG4gICAgICAgICAgICAgZGlzYWJsZWQ9e2t3YXJncy5mb3JtLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICBvbkNoYW5nZT17a3dhcmdzLmZvcm0uYmluZElucHV0KCdjYXB0Y2hhJyl9XG4gICAgICAgICAgICAgdmFsdWU9e2t3YXJncy5mb3JtLnN0YXRlLmNhcHRjaGF9IC8+XG4gICAgPC9Gb3JtR3JvdXA+O1xuICB9XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG59XG5cblxuZXhwb3J0IGNsYXNzIFJlQ2FwdGNoYUNvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGdyZWNhcHRjaGEucmVuZGVyKCdyZWNhcHRjaGEnLCB7XG4gICAgICAnc2l0ZWtleSc6IHRoaXMucHJvcHMuc2l0ZUtleSxcbiAgICAgICdjYWxsYmFjayc6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAvLyBmaXJlIGZha2V5IGV2ZW50IHRvIGJpbmRpbmdcbiAgICAgICAgdGhpcy5wcm9wcy5iaW5kaW5nKHtcbiAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIHZhbHVlOiByZXNwb25zZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGlkPVwicmVjYXB0Y2hhXCIgLz47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVDYXB0Y2hhIGV4dGVuZHMgQmFzZUNhcHRjaGEge1xuICBsb2FkKCkge1xuICAgIHRoaXMuX2luY2x1ZGUuaW5jbHVkZSgnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpLmpzJywgdHJ1ZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdmFyIHdhaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBncmVjYXB0Y2hhID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB3YWl0KCk7XG4gICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB3YWl0KCk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0b3IoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjb21wb25lbnQoa3dhcmdzKSB7XG4gICAgcmV0dXJuIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJDYXB0Y2hhXCIpfSBmb3I9XCJpZF9jYXB0Y2hhXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPXtrd2FyZ3MubGFiZWxDbGFzcyB8fCBcImNvbC1zbS00XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbENsYXNzPXtrd2FyZ3MuY29udHJvbENsYXNzIHx8IFwiY29sLXNtLThcIn1cbiAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uPXtrd2FyZ3MuZm9ybS5zdGF0ZS5lcnJvcnMuY2FwdGNoYX1cbiAgICAgICAgICAgICAgICAgICAgICBoZWxwVGV4dD17Z2V0dGV4dChcIlBsZWFzZSBzb2x2ZSB0aGUgcXVpY2sgdGVzdC5cIil9PlxuICAgICAgPFJlQ2FwdGNoYUNvbXBvbmVudCBzaXRlS2V5PXt0aGlzLl9jb250ZXh0LmdldCgnU0VUVElOR1MnKS5yZWNhcHRjaGFfc2l0ZV9rZXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmc9e2t3YXJncy5mb3JtLmJpbmRJbnB1dCgnY2FwdGNoYScpfSAvPlxuICAgIDwvRm9ybUdyb3VwPjtcbiAgfVxuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xufVxuXG5leHBvcnQgY2xhc3MgQ2FwdGNoYSB7XG4gIGluaXQoY29udGV4dCwgYWpheCwgaW5jbHVkZSwgc25hY2tiYXIpIHtcbiAgICBzd2l0Y2goY29udGV4dC5nZXQoJ1NFVFRJTkdTJykuY2FwdGNoYV90eXBlKSB7XG4gICAgICBjYXNlICdubyc6XG4gICAgICAgIHRoaXMuX2NhcHRjaGEgPSBuZXcgTm9DYXB0Y2hhKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdxYSc6XG4gICAgICAgIHRoaXMuX2NhcHRjaGEgPSBuZXcgUUFDYXB0Y2hhKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZSc6XG4gICAgICAgIHRoaXMuX2NhcHRjaGEgPSBuZXcgUmVDYXB0Y2hhKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX2NhcHRjaGEuaW5pdChjb250ZXh0LCBhamF4LCBpbmNsdWRlLCBzbmFja2Jhcik7XG4gIH1cblxuICAvLyBhY2Nlc3NvcnMgZm9yIHVuZGVybHlpbmcgc3RyYXRlZ3lcblxuICBsb2FkKCkge1xuICAgIHJldHVybiB0aGlzLl9jYXB0Y2hhLmxvYWQoKTtcbiAgfVxuXG4gIHZhbGlkYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwdGNoYS52YWxpZGF0b3IoKTtcbiAgfVxuXG4gIGNvbXBvbmVudChrd2FyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwdGNoYS5jb21wb25lbnQoa3dhcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQ2FwdGNoYSgpOyIsImV4cG9ydCBjbGFzcyBJbmNsdWRlIHtcbiAgaW5pdChzdGF0aWNVcmwpIHtcbiAgICB0aGlzLl9zdGF0aWNVcmwgPSBzdGF0aWNVcmw7XG4gICAgdGhpcy5faW5jbHVkZWQgPSBbXTtcbiAgfVxuXG4gIGluY2x1ZGUoc2NyaXB0LCByZW1vdGU9ZmFsc2UpIHtcbiAgICBpZiAodGhpcy5faW5jbHVkZWQuaW5kZXhPZihzY3JpcHQpID09PSAtMSkge1xuICAgICAgdGhpcy5faW5jbHVkZWQucHVzaChzY3JpcHQpO1xuICAgICAgdGhpcy5faW5jbHVkZShzY3JpcHQsIHJlbW90ZSk7XG4gICAgfVxuICB9XG5cbiAgX2luY2x1ZGUoc2NyaXB0LCByZW1vdGUpIHtcbiAgICAkLmFqYXgoe1xuICAgICAgdXJsOiAoIXJlbW90ZSA/IHRoaXMuX3N0YXRpY1VybCA6ICcnKSArIHNjcmlwdCxcbiAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgZGF0YVR5cGU6ICdzY3JpcHQnXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEluY2x1ZGUoKTsiLCJsZXQgc3RvcmFnZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG5cbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2Uge1xuICBpbml0KHByZWZpeCkge1xuICAgIHRoaXMuX3ByZWZpeCA9IHByZWZpeDtcbiAgICB0aGlzLl93YXRjaGVycyA9IFtdO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCAoZSkgPT4ge1xuICAgICAgbGV0IG5ld1ZhbHVlSnNvbiA9IEpTT04ucGFyc2UoZS5uZXdWYWx1ZSk7XG4gICAgICB0aGlzLl93YXRjaGVycy5mb3JFYWNoKGZ1bmN0aW9uKHdhdGNoZXIpIHtcbiAgICAgICAgaWYgKHdhdGNoZXIua2V5ID09PSBlLmtleSAmJiBlLm9sZFZhbHVlICE9PSBlLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgd2F0Y2hlci5jYWxsYmFjayhuZXdWYWx1ZUpzb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldChrZXksIHZhbHVlKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKHRoaXMuX3ByZWZpeCArIGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgfVxuXG4gIGdldChrZXkpIHtcbiAgICBsZXQgaXRlbVN0cmluZyA9IHN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9wcmVmaXggKyBrZXkpO1xuICAgIGlmIChpdGVtU3RyaW5nKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShpdGVtU3RyaW5nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgd2F0Y2goa2V5LCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3dhdGNoZXJzLnB1c2goe1xuICAgICAga2V5OiB0aGlzLl9wcmVmaXggKyBrZXksXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTG9jYWxTdG9yYWdlKCk7IiwiaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9tb3VudC1jb21wb25lbnQnO1xuXG5leHBvcnQgY2xhc3MgTW9iaWxlTmF2YmFyRHJvcGRvd24ge1xuICBpbml0KGVsZW1lbnQpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLl9jb21wb25lbnQgPSBudWxsO1xuICB9XG5cbiAgc2hvdyhjb21wb25lbnQpIHtcbiAgICBpZiAodGhpcy5fY29tcG9uZW50ID09PSBjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICBtb3VudChjb21wb25lbnQsIHRoaXMuX2VsZW1lbnQuaWQpO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcygnb3BlbicpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dDb25uZWN0ZWQobmFtZSwgY29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudCA9PT0gbmFtZSkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbXBvbmVudCA9IG5hbWU7XG4gICAgICBtb3VudChjb21wb25lbnQsIHRoaXMuX2VsZW1lbnQuaWQsIHRydWUpO1xuICAgICAgJCh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcygnb3BlbicpO1xuICAgIH1cbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgJCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgIHRoaXMuX2NvbXBvbmVudCA9IG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE1vYmlsZU5hdmJhckRyb3Bkb3duKCk7XG4iLCJpbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIE1vZGFsIHtcbiAgaW5pdChlbGVtZW50KSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICB0aGlzLl9tb2RhbCA9ICQoZWxlbWVudCkubW9kYWwoe3Nob3c6IGZhbHNlfSk7XG5cbiAgICB0aGlzLl9tb2RhbC5vbignaGlkZGVuLmJzLm1vZGFsJywgKCkgPT4ge1xuICAgICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLl9lbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNob3coY29tcG9uZW50KSB7XG4gICAgbW91bnQoY29tcG9uZW50LCB0aGlzLl9lbGVtZW50LmlkKTtcbiAgICB0aGlzLl9tb2RhbC5tb2RhbCgnc2hvdycpO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLl9tb2RhbC5tb2RhbCgnaGlkZScpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBNb2RhbCgpO1xuIiwiZXhwb3J0IGNsYXNzIFBhZ2VUaXRsZSB7XG4gIGluaXQoZm9ydW1OYW1lKSB7XG4gICAgdGhpcy5fZm9ydW1OYW1lID0gZm9ydW1OYW1lO1xuICB9XG5cbiAgc2V0KHRpdGxlKSB7XG4gICAgaWYgKHR5cGVvZiB0aXRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRpdGxlID0ge3RpdGxlOiB0aXRsZX07XG4gICAgfVxuXG4gICAgbGV0IGZpbmFsVGl0bGUgPSB0aXRsZS50aXRsZTtcblxuICAgIGlmICh0aXRsZS5wYWdlKSB7XG4gICAgICBsZXQgcGFnZUxhYmVsID0gaW50ZXJwb2xhdGUoZ2V0dGV4dCgncGFnZSAlKHBhZ2UpcycpLCB7XG4gICAgICAgIHBhZ2U6IHRpdGxlLnBhZ2VcbiAgICAgIH0sIHRydWUpO1xuXG4gICAgICBmaW5hbFRpdGxlICs9ICcgKCcgKyBwYWdlTGFiZWwgKyAnKSc7XG4gICAgfVxuXG4gICAgaWYgKHRpdGxlLnBhcmVudCkge1xuICAgICAgZmluYWxUaXRsZSArPSAnIHwgJyArIHRpdGxlLnBhcmVudDtcbiAgICB9XG5cbiAgICBkb2N1bWVudC50aXRsZSA9IGZpbmFsVGl0bGUgKyAnIHwgJyArIHRoaXMuX2ZvcnVtTmFtZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgUGFnZVRpdGxlKCk7XG4iLCJpbXBvcnQgeyBzaG93U25hY2tiYXIsIGhpZGVTbmFja2JhciB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy9zbmFja2Jhcic7XG5cbmNvbnN0IEhJREVfQU5JTUFUSU9OX0xFTkdUSCA9IDMwMDtcbmNvbnN0IE1FU1NBR0VfU0hPV19MRU5HVEggPSA1MDAwO1xuXG5leHBvcnQgY2xhc3MgU25hY2tiYXIge1xuICBpbml0KHN0b3JlKSB7XG4gICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIGFsZXJ0KG1lc3NhZ2UsIHR5cGUpIHtcbiAgICBpZiAodGhpcy5fdGltZW91dCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKGhpZGVTbmFja2JhcigpKTtcblxuICAgICAgdGhpcy5fdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICAgIHRoaXMuYWxlcnQobWVzc2FnZSwgdHlwZSk7XG4gICAgICB9LCBISURFX0FOSU1BVElPTl9MRU5HVEgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChzaG93U25hY2tiYXIobWVzc2FnZSwgdHlwZSkpO1xuICAgICAgdGhpcy5fdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goaGlkZVNuYWNrYmFyKCkpO1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICAgIH0sIE1FU1NBR0VfU0hPV19MRU5HVEgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNob3J0aGFuZHMgZm9yIG1lc3NhZ2UgdHlwZXNcblxuICBpbmZvKG1lc3NhZ2UpIHtcbiAgICB0aGlzLmFsZXJ0KG1lc3NhZ2UsICdpbmZvJyk7XG4gIH1cblxuICBzdWNjZXNzKG1lc3NhZ2UpIHtcbiAgICB0aGlzLmFsZXJ0KG1lc3NhZ2UsICdzdWNjZXNzJyk7XG4gIH1cblxuICB3YXJuaW5nKG1lc3NhZ2UpIHtcbiAgICB0aGlzLmFsZXJ0KG1lc3NhZ2UsICd3YXJuaW5nJyk7XG4gIH1cblxuICBlcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5hbGVydChtZXNzYWdlLCAnZXJyb3InKTtcbiAgfVxuXG4gIC8vIHNob3J0aGFuZCBmb3IgYXBpIGVycm9yc1xuXG4gIGFwaUVycm9yKHJlamVjdGlvbikge1xuICAgIGxldCBtZXNzYWdlID0gZ2V0dGV4dChcIlVua25vd24gZXJyb3IgaGFzIG9jY3VyZWQuXCIpO1xuXG4gICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDApIHtcbiAgICAgIG1lc3NhZ2UgPSByZWplY3Rpb24uZGV0YWlsO1xuICAgIH1cblxuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDAgJiYgcmVqZWN0aW9uLmRldGFpbCkge1xuICAgICAgbWVzc2FnZSA9IHJlamVjdGlvbi5kZXRhaWw7XG4gICAgfVxuXG4gICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMykge1xuICAgICAgbWVzc2FnZSA9IHJlamVjdGlvbi5kZXRhaWw7XG4gICAgICBpZiAobWVzc2FnZSA9PT0gXCJQZXJtaXNzaW9uIGRlbmllZFwiKSB7XG4gICAgICAgIG1lc3NhZ2UgPSBnZXR0ZXh0KFxuICAgICAgICAgIFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICBtZXNzYWdlID0gZ2V0dGV4dChcIkFjdGlvbiBsaW5rIGlzIGludmFsaWQuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZXJyb3IobWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFNuYWNrYmFyKCk7XG4iLCJpbXBvcnQgeyBjb21iaW5lUmVkdWNlcnMsIGNyZWF0ZVN0b3JlIH0gZnJvbSAncmVkdXgnO1xuXG5leHBvcnQgY2xhc3MgU3RvcmVXcmFwcGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fc3RvcmUgPSBudWxsO1xuICAgIHRoaXMuX3JlZHVjZXJzID0ge307XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0ge307XG4gIH1cblxuICBhZGRSZWR1Y2VyKG5hbWUsIHJlZHVjZXIsIGluaXRpYWxTdGF0ZSkge1xuICAgIHRoaXMuX3JlZHVjZXJzW25hbWVdID0gcmVkdWNlcjtcbiAgICB0aGlzLl9pbml0aWFsU3RhdGVbbmFtZV0gPSBpbml0aWFsU3RhdGU7XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMuX3N0b3JlID0gY3JlYXRlU3RvcmUoXG4gICAgICBjb21iaW5lUmVkdWNlcnModGhpcy5fcmVkdWNlcnMpLCB0aGlzLl9pbml0aWFsU3RhdGUpO1xuICB9XG5cbiAgZ2V0U3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlO1xuICB9XG5cbiAgLy8gU3RvcmUgQVBJXG5cbiAgZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmdldFN0YXRlKCk7XG4gIH1cblxuICBkaXNwYXRjaChhY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgU3RvcmVXcmFwcGVyKCk7XG4iLCIvKiBnbG9iYWwgenhjdmJuICovXG5leHBvcnQgY2xhc3MgWnhjdmJuIHtcbiAgaW5pdChpbmNsdWRlKSB7XG4gICAgdGhpcy5faW5jbHVkZSA9IGluY2x1ZGU7XG4gIH1cblxuICBzY29yZVBhc3N3b3JkKHBhc3N3b3JkLCBpbnB1dHMpIHtcbiAgICAvLyAwLTQgc2NvcmUsIHRoZSBtb3JlIHRoZSBzdHJvbmdlciBwYXNzd29yZFxuICAgIHJldHVybiB6eGN2Ym4ocGFzc3dvcmQsIGlucHV0cykuc2NvcmU7XG4gIH1cblxuICBsb2FkKCkge1xuICAgIGlmICh0eXBlb2YgenhjdmJuID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLl9pbmNsdWRlLmluY2x1ZGUoJ21pc2Fnby9qcy96eGN2Ym4uanMnKTtcbiAgICAgIHJldHVybiB0aGlzLl9sb2FkaW5nUHJvbWlzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fbG9hZGVkUHJvbWlzZSgpO1xuICAgIH1cbiAgfVxuXG4gIF9sb2FkaW5nUHJvbWlzZSgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgdmFyIHdhaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB6eGN2Ym4gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHdhaXQoKTtcbiAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHdhaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9sb2FkZWRQcm9taXNlKCkge1xuICAgIC8vIHdlIGhhdmUgYWxyZWFkeSBsb2FkZWQgenhjdmJuLmpzLCByZXNvbHZlIGF3YXkhXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgWnhjdmJuKCk7IiwiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBQcm92aWRlciwgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQmFubmVkUGFnZSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9iYW5uZWQtcGFnZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG4vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5sZXQgc2VsZWN0ID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnRpY2s7XG59O1xuXG5sZXQgUmVkcmF3ZWRCYW5uZWRQYWdlID0gY29ubmVjdChzZWxlY3QpKEJhbm5lZFBhZ2UpO1xuLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYmFuLCBjaGFuZ2VTdGF0ZSkge1xuICBSZWFjdERPTS5yZW5kZXIoXG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIDxQcm92aWRlciBzdG9yZT17c3RvcmUuZ2V0U3RvcmUoKX0+XG4gICAgICA8UmVkcmF3ZWRCYW5uZWRQYWdlIG1lc3NhZ2U9e2Jhbi5tZXNzYWdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcmVzPXtiYW4uZXhwaXJlc19vbiA/IG1vbWVudChiYW4uZXhwaXJlc19vbikgOiBudWxsfSAvPlxuICAgIDwvUHJvdmlkZXI+LFxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtbW91bnQnKVxuICApO1xuXG4gIGlmICh0eXBlb2YgY2hhbmdlU3RhdGUgPT09ICd1bmRlZmluZWQnIHx8IGNoYW5nZVN0YXRlKSB7XG4gICAgbGV0IGZvcnVtTmFtZSA9IG1pc2Fnby5nZXQoJ1NFVFRJTkdTJykuZm9ydW1fbmFtZTtcbiAgICBkb2N1bWVudC50aXRsZSA9IGdldHRleHQoXCJZb3UgYXJlIGJhbm5lZFwiKSArICcgfCAnICsgZm9ydW1OYW1lO1xuICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgbWlzYWdvLmdldCgnQkFOTkVEX1VSTCcpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxpc3QsIHJvd1dpZHRoLCBwYWRkaW5nPWZhbHNlKSB7XG4gIGxldCByb3dzID0gW107XG4gIGxldCByb3cgPSBbXTtcblxuICBsaXN0LmZvckVhY2goZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJvdy5wdXNoKGVsZW1lbnQpO1xuICAgIGlmIChyb3cubGVuZ3RoID09PSByb3dXaWR0aCkge1xuICAgICAgcm93cy5wdXNoKHJvdyk7XG4gICAgICByb3cgPSBbXTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHBhZCByb3cgdG8gcmVxdWlyZWQgbGVuZ3RoP1xuICBpZiAocGFkZGluZyAhPT0gZmFsc2UgJiYgcm93Lmxlbmd0aCA+IDAgJiYgcm93Lmxlbmd0aCA8IHJvd1dpZHRoKSB7XG4gICAgZm9yIChsZXQgaSA9IHJvdy5sZW5ndGg7IGkgPCByb3dXaWR0aDsgaSArKykge1xuICAgICAgcm93LnB1c2gocGFkZGluZyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJvdy5sZW5ndGgpIHtcbiAgICByb3dzLnB1c2gocm93KTtcbiAgfVxuXG4gIHJldHVybiByb3dzO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGJ5dGVzKSB7XG4gIGlmIChieXRlcyA+IDEwMDAgKiAxMDAwICogMTAwMCkge1xuICAgIHJldHVybiAoTWF0aC5yb3VuZChieXRlcyAqIDEwMCAvICgxMDAwICogMTAwMCAqIDEwMDApKSAvIDEwMCkgKyAnIEdCJztcbiAgfSBlbHNlIGlmIChieXRlcyA+IDEwMDAgKiAxMDAwKSB7XG4gICAgcmV0dXJuIChNYXRoLnJvdW5kKGJ5dGVzICogMTAwIC8gKDEwMDAgKiAxMDAwKSkgLyAxMDApICsgJyBNQic7XG4gIH0gZWxzZSBpZiAoYnl0ZXMgPiAxMDAwKSB7XG4gICAgcmV0dXJuIChNYXRoLnJvdW5kKGJ5dGVzICogMTAwIC8gMTAwMCkgLyAxMDApICsgJyBLQic7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChNYXRoLnJvdW5kKGJ5dGVzICogMTAwKSAvIDEwMCkgKyAnIEInO1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAncmVhY3QtcmVkdXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oQ29tcG9uZW50LCByb290RWxlbWVudElkLCBjb25uZWN0ZWQ9dHJ1ZSkge1xuICBsZXQgcm9vdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChyb290RWxlbWVudElkKTtcblxuICBpZiAocm9vdEVsZW1lbnQpIHtcbiAgICBpZiAoY29ubmVjdGVkKSB7XG4gICAgICBSZWFjdERPTS5yZW5kZXIoXG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgICAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZS5nZXRTdG9yZSgpfT5cbiAgICAgICAgICA8Q29tcG9uZW50IC8+XG4gICAgICAgIDwvUHJvdmlkZXI+LFxuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgICByb290RWxlbWVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RET00ucmVuZGVyKFxuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIDxDb21wb25lbnQgLz4sXG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICAgIHJvb3RFbGVtZW50XG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiY2xhc3MgT3JkZXJlZExpc3Qge1xuICAgIGNvbnN0cnVjdG9yKGl0ZW1zKSB7XG4gICAgICB0aGlzLmlzT3JkZXJlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5faXRlbXMgPSBpdGVtcyB8fCBbXTtcbiAgICB9XG5cbiAgICBhZGQoa2V5LCBpdGVtLCBvcmRlcikge1xuICAgICAgdGhpcy5faXRlbXMucHVzaCh7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBpdGVtOiBpdGVtLFxuXG4gICAgICAgIGFmdGVyOiBvcmRlciA/IG9yZGVyLmFmdGVyIHx8IG51bGwgOiBudWxsLFxuICAgICAgICBiZWZvcmU6IG9yZGVyID8gb3JkZXIuYmVmb3JlIHx8IG51bGwgOiBudWxsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5faXRlbXNbaV0ua2V5ID09PSBrZXkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNbaV0uaXRlbTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaGFzKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0KGtleSkgIT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YWx1ZXMoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2l0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuX2l0ZW1zW2ldLml0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICBvcmRlcih2YWx1ZXNfb25seSkge1xuICAgICAgaWYgKCF0aGlzLmlzT3JkZXJlZCkge1xuICAgICAgICB0aGlzLl9pdGVtcyA9IHRoaXMuX29yZGVyKHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgdGhpcy5pc09yZGVyZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVzX29ubHkgfHwgdHlwZW9mIHZhbHVlc19vbmx5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcmRlcmVkVmFsdWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3JkZXIodHJ1ZSk7XG4gICAgfVxuXG4gICAgX29yZGVyKHVub3JkZXJlZCkge1xuICAgICAgLy8gSW5kZXggb2YgdW5vcmRlcmVkIGl0ZW1zXG4gICAgICB2YXIgaW5kZXggPSBbXTtcbiAgICAgIHVub3JkZXJlZC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGluZGV4LnB1c2goaXRlbS5rZXkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIE9yZGVyZWQgaXRlbXNcbiAgICAgIHZhciBvcmRlcmVkID0gW107XG4gICAgICB2YXIgb3JkZXJpbmcgPSBbXTtcblxuICAgICAgLy8gRmlyc3QgcGFzczogcmVnaXN0ZXIgaXRlbXMgdGhhdFxuICAgICAgLy8gZG9uJ3Qgc3BlY2lmeSB0aGVpciBvcmRlclxuICAgICAgdW5vcmRlcmVkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKCFpdGVtLmFmdGVyICYmICFpdGVtLmJlZm9yZSkge1xuICAgICAgICAgIG9yZGVyZWQucHVzaChpdGVtKTtcbiAgICAgICAgICBvcmRlcmluZy5wdXNoKGl0ZW0ua2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNlY29uZCBwYXNzOiByZWdpc3RlciBpdGVtcyB0aGF0XG4gICAgICAvLyBzcGVjaWZ5IHRoZWlyIGJlZm9yZSB0byBcIl9lbmRcIlxuICAgICAgdW5vcmRlcmVkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaWYgKGl0ZW0uYmVmb3JlID09PSBcIl9lbmRcIikge1xuICAgICAgICAgIG9yZGVyZWQucHVzaChpdGVtKTtcbiAgICAgICAgICBvcmRlcmluZy5wdXNoKGl0ZW0ua2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRoaXJkIHBhc3M6IGtlZXAgaXRlcmF0aW5nIGl0ZW1zXG4gICAgICAvLyB1bnRpbCB3ZSBoaXQgaXRlcmF0aW9ucyBsaW1pdCBvciBmaW5pc2hcbiAgICAgIC8vIG9yZGVyaW5nIGxpc3RcbiAgICAgIGZ1bmN0aW9uIGluc2VydEl0ZW0oaXRlbSkge1xuICAgICAgICB2YXIgaW5zZXJ0QXQgPSAtMTtcbiAgICAgICAgaWYgKG9yZGVyaW5nLmluZGV4T2YoaXRlbS5rZXkpID09PSAtMSkge1xuICAgICAgICAgIGlmIChpdGVtLmFmdGVyKSB7XG4gICAgICAgICAgICBpbnNlcnRBdCA9IG9yZGVyaW5nLmluZGV4T2YoaXRlbS5hZnRlcik7XG4gICAgICAgICAgICBpZiAoaW5zZXJ0QXQgIT09IC0xKSB7XG4gICAgICAgICAgICAgIGluc2VydEF0ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmJlZm9yZSkge1xuICAgICAgICAgICAgaW5zZXJ0QXQgPSBvcmRlcmluZy5pbmRleE9mKGl0ZW0uYmVmb3JlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5zZXJ0QXQgIT09IC0xKSB7XG4gICAgICAgICAgICBvcmRlcmVkLnNwbGljZShpbnNlcnRBdCwgMCwgaXRlbSk7XG4gICAgICAgICAgICBvcmRlcmluZy5zcGxpY2UoaW5zZXJ0QXQsIDAsIGl0ZW0ua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdGlvbnMgPSAyMDA7XG4gICAgICB3aGlsZSAoaXRlcmF0aW9ucyA+IDAgJiYgaW5kZXgubGVuZ3RoICE9PSBvcmRlcmluZy5sZW5ndGgpIHtcbiAgICAgICAgaXRlcmF0aW9ucyAtPSAxO1xuICAgICAgICB1bm9yZGVyZWQuZm9yRWFjaChpbnNlcnRJdGVtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yZGVyZWQ7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGRlZmF1bHQgT3JkZXJlZExpc3Q7XG4iLCJleHBvcnQgZnVuY3Rpb24gaW50KG1pbiwgbWF4KSB7XG4gIHJldHVybiBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogKG1heCArIDEpKSkgKyBtaW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByYW5nZShtaW4sIG1heCkge1xuICBsZXQgYXJyYXkgPSBuZXcgQXJyYXkoaW50KG1pbiwgbWF4KSk7XG4gIGZvcihsZXQgaT0wOyBpPGFycmF5Lmxlbmd0aDsgaSsrKXtcbiAgICBhcnJheVtpXSA9IGk7XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59IiwiLy8ganNoaW50IGlnbm9yZTpzdGFydFxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IGNyZWF0ZUhpc3RvcnkgZnJvbSAnaGlzdG9yeS9saWIvY3JlYXRlQnJvd3Nlckhpc3RvcnknO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmNvbnN0IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtbW91bnQnKTtcbmNvbnN0IGhpc3RvcnkgPSBuZXcgY3JlYXRlSGlzdG9yeSgpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvcHRpb25zKSB7XG4gIGxldCByb3V0ZXMgPSB7XG4gICAgY29tcG9uZW50OiBvcHRpb25zLmNvbXBvbmVudCxcbiAgICBjaGlsZFJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiBvcHRpb25zLnJvb3QsXG4gICAgICAgIG9uRW50ZXI6IGZ1bmN0aW9uKG5leHRTdGF0ZSwgcmVwbGFjZVN0YXRlKSB7XG4gICAgICAgICAgcmVwbGFjZVN0YXRlKG51bGwsIG9wdGlvbnMucGF0aHNbMF0ucGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLmNvbmNhdChvcHRpb25zLnBhdGhzLm1hcChmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9KSlcbiAgfTtcblxuICBSZWFjdERPTS5yZW5kZXIoXG4gICAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZS5nZXRTdG9yZSgpfT5cbiAgICAgIDxSb3V0ZXIgcm91dGVzPXtyb3V0ZXN9IGhpc3Rvcnk9e2hpc3Rvcnl9IC8+XG4gICAgPC9Qcm92aWRlcj4sXG4gICAgcm9vdEVsZW1lbnRcbiAgKTtcbn1cbiIsImNvbnN0IEVNQUlMID0gL14oKFtePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdK1xcLikrW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXXsyLH0pJC9pO1xuY29uc3QgVVNFUk5BTUUgPSBuZXcgUmVnRXhwKCdeWzAtOWEtel0rJCcsICdpJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZCgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKCQudHJpbSh2YWx1ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuXCIpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtYWlsKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKCFFTUFJTC50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2UgfHwgZ2V0dGV4dChcIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cIik7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWluTGVuZ3RoKGxpbWl0VmFsdWUsIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJldHVybk1lc3NhZ2UgPSAnJztcbiAgICB2YXIgbGVuZ3RoID0gJC50cmltKHZhbHVlKS5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoIDwgbGltaXRWYWx1ZSkge1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuTWVzc2FnZSA9IG1lc3NhZ2UobGltaXRWYWx1ZSwgbGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybk1lc3NhZ2UgPSBuZ2V0dGV4dChcbiAgICAgICAgICBcIkVuc3VyZSB0aGlzIHZhbHVlIGhhcyBhdCBsZWFzdCAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVyIChpdCBoYXMgJShzaG93X3ZhbHVlKXMpLlwiLFxuICAgICAgICAgIFwiRW5zdXJlIHRoaXMgdmFsdWUgaGFzIGF0IGxlYXN0ICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXJzIChpdCBoYXMgJShzaG93X3ZhbHVlKXMpLlwiLFxuICAgICAgICAgIGxpbWl0VmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludGVycG9sYXRlKHJldHVybk1lc3NhZ2UsIHtcbiAgICAgICAgbGltaXRfdmFsdWU6IGxpbWl0VmFsdWUsXG4gICAgICAgIHNob3dfdmFsdWU6IGxlbmd0aFxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF4TGVuZ3RoKGxpbWl0VmFsdWUsIG1lc3NhZ2UpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJldHVybk1lc3NhZ2UgPSAnJztcbiAgICB2YXIgbGVuZ3RoID0gJC50cmltKHZhbHVlKS5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoID4gbGltaXRWYWx1ZSkge1xuICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuTWVzc2FnZSA9IG1lc3NhZ2UobGltaXRWYWx1ZSwgbGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybk1lc3NhZ2UgPSBuZ2V0dGV4dChcbiAgICAgICAgICBcIkVuc3VyZSB0aGlzIHZhbHVlIGhhcyBhdCBtb3N0ICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXIgKGl0IGhhcyAlKHNob3dfdmFsdWUpcykuXCIsXG4gICAgICAgICAgXCJFbnN1cmUgdGhpcyB2YWx1ZSBoYXMgYXQgbW9zdCAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVycyAoaXQgaGFzICUoc2hvd192YWx1ZSlzKS5cIixcbiAgICAgICAgICBsaW1pdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShyZXR1cm5NZXNzYWdlLCB7XG4gICAgICAgIGxpbWl0X3ZhbHVlOiBsaW1pdFZhbHVlLFxuICAgICAgICBzaG93X3ZhbHVlOiBsZW5ndGhcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZXJuYW1lTWluTGVuZ3RoKHNldHRpbmdzKSB7XG4gIHZhciBtZXNzYWdlID0gZnVuY3Rpb24obGltaXRWYWx1ZSkge1xuICAgIHJldHVybiBuZ2V0dGV4dChcbiAgICAgIFwiVXNlcm5hbWUgbXVzdCBiZSBhdCBsZWFzdCAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVyIGxvbmcuXCIsXG4gICAgICBcIlVzZXJuYW1lIG11c3QgYmUgYXQgbGVhc3QgJShsaW1pdF92YWx1ZSlzIGNoYXJhY3RlcnMgbG9uZy5cIixcbiAgICAgIGxpbWl0VmFsdWUpO1xuICB9O1xuICByZXR1cm4gdGhpcy5taW5MZW5ndGgoc2V0dGluZ3MudXNlcm5hbWVfbGVuZ3RoX21pbiwgbWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VybmFtZU1heExlbmd0aChzZXR0aW5ncykge1xuICB2YXIgbWVzc2FnZSA9IGZ1bmN0aW9uKGxpbWl0VmFsdWUpIHtcbiAgICByZXR1cm4gbmdldHRleHQoXG4gICAgICBcIlVzZXJuYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVyLlwiLFxuICAgICAgXCJVc2VybmFtZSBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gJShsaW1pdF92YWx1ZSlzIGNoYXJhY3RlcnMuXCIsXG4gICAgICBsaW1pdFZhbHVlKTtcbiAgfTtcbiAgcmV0dXJuIHRoaXMubWF4TGVuZ3RoKHNldHRpbmdzLnVzZXJuYW1lX2xlbmd0aF9tYXgsIG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlcm5hbWVDb250ZW50KCkge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAoIVVTRVJOQU1FLnRlc3QoJC50cmltKHZhbHVlKSkpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiVXNlcm5hbWUgY2FuIG9ubHkgY29udGFpbiBsYXRpbiBhbHBoYWJldCBsZXR0ZXJzIGFuZCBkaWdpdHMuXCIpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhc3N3b3JkTWluTGVuZ3RoKHNldHRpbmdzKSB7XG4gIHZhciBtZXNzYWdlID0gZnVuY3Rpb24obGltaXRWYWx1ZSkge1xuICAgIHJldHVybiBuZ2V0dGV4dChcbiAgICAgIFwiVmFsaWQgcGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVyIGxvbmcuXCIsXG4gICAgICBcIlZhbGlkIHBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgJShsaW1pdF92YWx1ZSlzIGNoYXJhY3RlcnMgbG9uZy5cIixcbiAgICAgIGxpbWl0VmFsdWUpO1xuICB9O1xuICByZXR1cm4gdGhpcy5taW5MZW5ndGgoc2V0dGluZ3MucGFzc3dvcmRfbGVuZ3RoX21pbiwgbWVzc2FnZSk7XG59Il19
+!function e(t,n,a){function r(o,i){if(!n[o]){if(!t[o]){var u="function"==typeof require&&require;if(!i&&u)return u(o,!0);if(s)return s(o,!0);var l=new Error("Cannot find module '"+o+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[o]={exports:{}};t[o][0].call(c.exports,function(e){var n=t[o][1][e];return r(n?n:e)},c,c.exports,e,t,n,a)}return n[o].exports}for(var s="function"==typeof require&&require,o=0;o<a.length;o++)r(a[o]);return r}({1:[function(e,t,n){function a(){c=!1,i.length?l=i.concat(l):d=-1,l.length&&r()}function r(){if(!c){var e=setTimeout(a);c=!0;for(var t=l.length;t;){for(i=l,l=[];++d<t;)i&&i[d].run();d=-1,t=l.length}i=null,c=!1,clearTimeout(e)}}function s(e,t){this.fun=e,this.array=t}function o(){}var i,u=t.exports={},l=[],c=!1,d=-1;u.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new s(e,t)),1!==l.length||c||setTimeout(r,0)},s.prototype.run=function(){this.fun.apply(null,this.array)},u.title="browser",u.browser=!0,u.env={},u.argv=[],u.version="",u.versions={},u.on=o,u.addListener=o,u.once=o,u.off=o,u.removeListener=o,u.removeAllListeners=o,u.emit=o,u.binding=function(e){throw new Error("process.binding is not supported")},u.cwd=function(){return"/"},u.chdir=function(e){throw new Error("process.chdir is not supported")},u.umask=function(){return 0}},{}],2:[function(e,t,n){(function(t){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Misago=void 0;var o=e("../../../../documents/misago/frontend/src/utils/ordered-list"),i=a(o),u=n.Misago=function(){function e(){r(this,e),this._initializers=[],this._context={}}return s(e,[{key:"addInitializer",value:function(e){this._initializers.push({key:e.name,item:e.initializer,after:e.after,before:e.before})}},{key:"init",value:function(e){var t=this;this._context=e;var n=new i["default"](this._initializers).orderedValues();n.forEach(function(e){e(t)})}},{key:"has",value:function(e){return!!this._context[e]}},{key:"get",value:function(e,t){return this.has(e)?this._context[e]:t||void 0}},{key:"pop",value:function(e){if(this.has(e)){var t=this._context[e];return this._context[e]=null,t}}}]),e}(),l=new u;t.misago=l,n["default"]=l}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../../../documents/misago/frontend/src/utils/ordered-list":106}],3:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init(o["default"].get("CSRF_COOKIE_NAME"))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/ajax"),u=a(i);o["default"].addInitializer({name:"ajax",initializer:r})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/ajax":91}],4:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,d["default"])((0,s.connect)(u.select)(l["default"]),"auth-message-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("react-redux"),o=e("../../../../../documents/misago/frontend/src/index"),i=a(o),u=e("../../../../../documents/misago/frontend/src/components/auth-message"),l=a(u),c=e("../../../../../documents/misago/frontend/src/utils/mount-component"),d=a(c);i["default"].addInitializer({name:"component:auth-message",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/components/auth-message":48,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105,"react-redux":"react-redux"}],5:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){c["default"].addReducer("auth",u["default"],Object.assign({isAuthenticated:e.get("isAuthenticated"),isAnonymous:!e.get("isAuthenticated"),user:e.get("user")},i.initialState))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/reducers/auth"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/store"),c=a(l);o["default"].addInitializer({name:"reducer:auth",initializer:r,before:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/auth":86,"../../../../../documents/misago/frontend/src/services/store":100}],6:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init(f["default"],m["default"],c["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/auth"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/modal"),c=a(l),d=e("../../../../../documents/misago/frontend/src/services/store"),f=a(d),p=e("../../../../../documents/misago/frontend/src/services/local-storage"),m=a(p);o["default"].addInitializer({name:"auth",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/auth":92,"../../../../../documents/misago/frontend/src/services/local-storage":95,"../../../../../documents/misago/frontend/src/services/modal":97,"../../../../../documents/misago/frontend/src/services/store":100}],7:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("BAN_MESSAGE")&&(0,u["default"])(e.get("BAN_MESSAGE"),!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/utils/banned-page"),u=a(i);o["default"].addInitializer({name:"component:baned-page",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/banned-page":102}],8:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){c["default"].init(e,u["default"],f["default"],m["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/ajax"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/captcha"),c=a(l),d=e("../../../../../documents/misago/frontend/src/services/include"),f=a(d),p=e("../../../../../documents/misago/frontend/src/services/snackbar"),m=a(p);o["default"].addInitializer({name:"captcha",initializer:r})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/ajax":91,"../../../../../documents/misago/frontend/src/services/captcha":93,"../../../../../documents/misago/frontend/src/services/include":94,"../../../../../documents/misago/frontend/src/services/snackbar":99}],9:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){u["default"].init(e.get("STATIC_URL"))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/include"),u=a(i);o["default"].addInitializer({name:"include",initializer:r})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/include":94}],10:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init("misago_")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/local-storage"),u=a(i);o["default"].addInitializer({name:"local-storage",initializer:r})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/local-storage":95}],11:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){var e=document.getElementById("mobile-navbar-dropdown-mount");e&&u["default"].init(e)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown"),u=a(i);o["default"].addInitializer({name:"dropdown",initializer:r,before:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown":96}],12:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){var e=document.getElementById("modal-mount");e&&u["default"].init(e)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/modal"),u=a(i);o["default"].addInitializer({name:"modal",initializer:r,before:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/modal":97}],13:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){o["default"].locale($("html").attr("lang"))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("moment"),o=a(s),i=e("../../../../../documents/misago/frontend/src/index"),u=a(i);u["default"].addInitializer({name:"moment",initializer:r})},{"../../../../../documents/misago/frontend/src/index":85,moment:"moment"}],14:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("USER_OPTIONS")&&(0,f["default"])({root:u["default"].get("USERCP_URL"),component:o["default"],paths:(0,s.paths)(c["default"])})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/components/options/root"),o=a(s),i=e("../../../../../documents/misago/frontend/src/index"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/store"),c=a(l),d=e("../../../../../documents/misago/frontend/src/utils/routed-component"),f=a(d);u["default"].addInitializer({name:"component:options",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/components/options/root":65,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/store":100,"../../../../../documents/misago/frontend/src/utils/routed-component":108}],15:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){u["default"].init(e.get("SETTINGS").forum_name)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/page-title"),u=a(i);o["default"].addInitializer({name:"page-title",initializer:r})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/page-title":98}],16:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("request-activation-link-mount")&&(0,c["default"])(u["default"],"request-activation-link-mount",!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/components/request-activation-link"),u=a(i),l=e("../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);o["default"].addInitializer({name:"component:request-activation-link",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/components/request-activation-link":70,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105}],17:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("request-password-reset-mount")&&(0,c["default"])(u["default"],"request-password-reset-mount",!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/components/request-password-reset"),u=a(i),l=e("../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);o["default"].addInitializer({name:"component:request-password-reset",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/components/request-password-reset":71,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105}],18:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("reset-password-form-mount")&&(0,c["default"])(u["default"],"reset-password-form-mount",!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/components/reset-password-form"),u=a(i),l=e("../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);o["default"].addInitializer({name:"component:reset-password-form",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/components/reset-password-form":72,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105}],19:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,c["default"])((0,s.connect)(u.select)(u.Snackbar),"snackbar-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("react-redux"),o=e("../../../../../documents/misago/frontend/src/index"),i=a(o),u=e("../../../../../documents/misago/frontend/src/components/snackbar"),l=e("../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);i["default"].addInitializer({name:"component:snackbar",initializer:r,after:"snackbar"})},{"../../../../../documents/misago/frontend/src/components/snackbar":75,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105,"react-redux":"react-redux"}],20:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("snackbar",u["default"],i.initialState)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/reducers/snackbar"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/store"),c=a(l);o["default"].addInitializer({name:"reducer:snackbar",initializer:r,before:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/snackbar":87,"../../../../../documents/misago/frontend/src/services/store":100}],21:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init(c["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/snackbar"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/store"),c=a(l);o["default"].addInitializer({name:"snackbar",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/snackbar":99,"../../../../../documents/misago/frontend/src/services/store":100}],22:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init()}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/store"),u=a(i);o["default"].addInitializer({name:"store",initializer:r,before:"_end"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/store":100}],23:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("tick",u["default"],i.initialState)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/reducers/tick"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/store"),c=a(l);o["default"].addInitializer({name:"reducer:tick",initializer:r,before:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/tick":88,"../../../../../documents/misago/frontend/src/services/store":100}],24:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){window.setInterval(function(){l["default"].dispatch((0,i.doTick)())},c)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/reducers/tick"),u=e("../../../../../documents/misago/frontend/src/services/store"),l=a(u),c=5e4;o["default"].addInitializer({name:"tick-start",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/tick":88,"../../../../../documents/misago/frontend/src/services/store":100}],25:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,c["default"])((0,s.connect)(u.select)(u.UserMenu),"user-menu-mount"),(0,c["default"])((0,s.connect)(u.select)(u.CompactUserMenu),"user-menu-compact-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("react-redux"),o=e("../../../../../documents/misago/frontend/src/index"),i=a(o),u=e("../../../../../documents/misago/frontend/src/components/user-menu/root"),l=e("../../../../../documents/misago/frontend/src/utils/mount-component"),c=a(l);i["default"].addInitializer({name:"component:user-menu",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/components/user-menu/root":77,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/utils/mount-component":105,"react-redux":"react-redux"}],26:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("username-history",u["default"],[])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/reducers/username-history"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/store"),c=a(l);o["default"].addInitializer({name:"reducer:username-history",initializer:r,before:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/username-history":89,"../../../../../documents/misago/frontend/src/services/store":100}],27:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("USERS_LISTS")&&(0,f["default"])({root:u["default"].get("USERS_LIST_URL"),component:o["default"],paths:(0,s.paths)(c["default"])})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/components/users/root"),o=a(s),i=e("../../../../../documents/misago/frontend/src/index"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/store"),c=a(l),d=e("../../../../../documents/misago/frontend/src/utils/routed-component"),f=a(d);u["default"].addInitializer({name:"component:users",initializer:r,after:"store"})},{"../../../../../documents/misago/frontend/src/components/users/root":83,"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/store":100,"../../../../../documents/misago/frontend/src/utils/routed-component":108}],28:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("users",u["default"],[])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/reducers/users"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/store"),c=a(l);o["default"].addInitializer({name:"reducer:users",initializer:r,before:"store"})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/reducers/users":90,"../../../../../documents/misago/frontend/src/services/store":100}],29:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].init(u["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var s=e("../../../../../documents/misago/frontend/src/index"),o=a(s),i=e("../../../../../documents/misago/frontend/src/services/include"),u=a(i),l=e("../../../../../documents/misago/frontend/src/services/zxcvbn"),c=a(l);o["default"].addInitializer({name:"zxcvbn",initializer:r})},{"../../../../../documents/misago/frontend/src/index":85,"../../../../../documents/misago/frontend/src/services/include":94,"../../../../../documents/misago/frontend/src/services/zxcvbn":101}],30:[function(e,t,n){function a(e){return null===e||void 0===e}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length?"function"!=typeof e.copy||"function"!=typeof e.slice?!1:e.length>0&&"number"!=typeof e[0]?!1:!0:!1}function s(e,t,n){var s,c;if(a(e)||a(t))return!1;if(e.prototype!==t.prototype)return!1;if(u(e))return u(t)?(e=o.call(e),t=o.call(t),l(e,t,n)):!1;if(r(e)){if(!r(t))return!1;if(e.length!==t.length)return!1;for(s=0;s<e.length;s++)if(e[s]!==t[s])return!1;return!0}try{var d=i(e),f=i(t)}catch(p){return!1}if(d.length!=f.length)return!1;for(d.sort(),f.sort(),s=d.length-1;s>=0;s--)if(d[s]!=f[s])return!1;for(s=d.length-1;s>=0;s--)if(c=d[s],!l(e[c],t[c],n))return!1;return typeof e==typeof t}var o=Array.prototype.slice,i=e("./lib/keys.js"),u=e("./lib/is_arguments.js"),l=t.exports=function(e,t,n){return n||(n={}),e===t?!0:e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():!e||!t||"object"!=typeof e&&"object"!=typeof t?n.strict?e===t:e==t:s(e,t,n)}},{"./lib/is_arguments.js":31,"./lib/keys.js":32}],31:[function(e,t,n){function a(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length&&Object.prototype.hasOwnProperty.call(e,"callee")&&!Object.prototype.propertyIsEnumerable.call(e,"callee")||!1}var s="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();n=t.exports=s?a:r,n.supported=a,n.unsupported=r},{}],32:[function(e,t,n){function a(e){var t=[];for(var n in e)t.push(n);return t}n=t.exports="function"==typeof Object.keys?Object.keys:a,n.shim=a},{}],33:[function(e,t,n){"use strict";n.__esModule=!0;var a="PUSH";n.PUSH=a;var r="REPLACE";n.REPLACE=r;var s="POP";n.POP=s,n["default"]={PUSH:a,REPLACE:r,POP:s}},{}],34:[function(e,t,n){"use strict";function a(e,t,n){function a(){o=!0,n.apply(this,arguments)}function r(){o||(e>s?t.call(this,s++,r,a):a.apply(this,arguments))}var s=0,o=!1;r()}n.__esModule=!0,n.loopAsync=a},{}],35:[function(e,t,n){(function(t){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return l+e}function s(e,n){try{window.sessionStorage.setItem(r(e),JSON.stringify(n))}catch(a){if(a.name===d)return void("production"!==t.env.NODE_ENV?u["default"](!1,"[history] Unable to save state; sessionStorage is not available due to security settings"):void 0);if(a.name===c&&0===window.sessionStorage.length)return void("production"!==t.env.NODE_ENV?u["default"](!1,"[history] Unable to save state; sessionStorage is not available in Safari private mode"):void 0);throw a}}function o(e){var n=void 0;try{n=window.sessionStorage.getItem(r(e))}catch(a){if(a.name===d)return"production"!==t.env.NODE_ENV?u["default"](!1,"[history] Unable to read state; sessionStorage is not available due to security settings"):void 0,null}if(n)try{return JSON.parse(n)}catch(a){}return null}n.__esModule=!0,n.saveState=s,n.readState=o;var i=e("warning"),u=a(i),l="@@History/",c="QuotaExceededError",d="SecurityError"}).call(this,e("_process"))},{_process:1,warning:47}],36:[function(e,t,n){"use strict";function a(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,n)}function r(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent("on"+t,n)}function s(){return window.location.href.split("#")[1]||""}function o(e){window.location.replace(window.location.pathname+window.location.search+"#"+e)}function i(){return window.location.pathname+window.location.search+window.location.hash}function u(e){e&&window.history.go(e)}function l(e,t){t(window.confirm(e))}function c(){var e=navigator.userAgent;return-1===e.indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone")?-1!==e.indexOf("CriOS")?!1:window.history&&"pushState"in window.history:!1}function d(){var e=navigator.userAgent;return-1===e.indexOf("Firefox")}n.__esModule=!0,n.addEventListener=a,n.removeEventListener=r,n.getHashPath=s,n.replaceHashPath=o,n.getWindowPath=i,n.go=u,n.getUserConfirmation=l,n.supportsHistory=c,n.supportsGoWithoutReloadUsingHash=d},{}],37:[function(e,t,n){"use strict";n.__esModule=!0;var a=!("undefined"==typeof window||!window.document||!window.document.createElement);n.canUseDOM=a},{}],38:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(){function e(e){e=e||window.history.state||{};var t=d.getWindowPath(),n=e,a=n.key,r=void 0;a?r=f.readState(a):(r=null,a=_.createKey(),b&&window.history.replaceState(o({},e,{key:a}),null,t));var s=v["default"](t);return _.createLocation(o({},s,{state:r}),void 0,a)}function t(t){function n(t){void 0!==t.state&&a(e(t.state))}var a=t.transitionTo;return d.addEventListener(window,"popstate",n),function(){d.removeEventListener(window,"popstate",n)}}function n(e){var t=e.basename,n=e.pathname,a=e.search,r=e.hash,s=e.state,o=e.action,i=e.key;if(o!==l.POP){f.saveState(i,s);var u=(t||"")+n+a+r,c={key:i};if(o===l.PUSH){if(y)return window.location.href=u,!1;window.history.pushState(c,null,u)}else{if(y)return window.location.replace(u),!1;window.history.replaceState(c,null,u)}}}function r(e){1===++w&&(E=t(_));var n=_.listenBefore(e);return function(){n(),0===--w&&E()}}function s(e){1===++w&&(E=t(_));var n=_.listen(e);return function(){n(),0===--w&&E()}}function i(e){1===++w&&(E=t(_)),_.registerTransitionHook(e)}function p(e){_.unregisterTransitionHook(e),0===--w&&E()}var h=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];c.canUseDOM?void 0:"production"!==a.env.NODE_ENV?u["default"](!1,"Browser history needs a DOM"):u["default"](!1);var g=h.forceRefresh,b=d.supportsHistory(),y=!b||g,_=m["default"](o({},h,{getCurrentLocation:e,finishTransition:n,saveState:f.saveState})),w=0,E=void 0;return o({},_,{listenBefore:r,listen:s,registerTransitionHook:i,unregisterTransitionHook:p})}n.__esModule=!0;var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},i=e("invariant"),u=r(i),l=e("./Actions"),c=e("./ExecutionEnvironment"),d=e("./DOMUtils"),f=e("./DOMStateStorage"),p=e("./createDOMHistory"),m=r(p),h=e("./parsePath"),v=r(h);n["default"]=s,t.exports=n["default"]}).call(this,e("_process"))},{"./Actions":33,"./DOMStateStorage":35,"./DOMUtils":36,"./ExecutionEnvironment":37,"./createDOMHistory":39,"./parsePath":44,_process:1,invariant:46}],39:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(e){function t(e){return l.canUseDOM?void 0:"production"!==a.env.NODE_ENV?u["default"](!1,"DOM history needs a DOM"):u["default"](!1),n.listen(e)}var n=f["default"](o({getUserConfirmation:c.getUserConfirmation},e,{go:c.go}));return o({},n,{listen:t})}n.__esModule=!0;var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},i=e("invariant"),u=r(i),l=e("./ExecutionEnvironment"),c=e("./DOMUtils"),d=e("./createHistory"),f=r(d);n["default"]=s,t.exports=n["default"]}).call(this,e("_process"))},{"./DOMUtils":36,"./ExecutionEnvironment":37,"./createHistory":40,_process:1,invariant:46}],40:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return Math.random().toString(36).substr(2,e)}function s(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.key===t.key&&l["default"](e.state,t.state)}function o(){function e(e){return U.push(e),function(){U=U.filter(function(t){return t!==e})}}function t(){return B&&B.action===d.POP?z.indexOf(B.key):H?z.indexOf(H.key):-1}function n(e){var n=t();H=e,H.action===d.PUSH?z=[].concat(z.slice(0,n+1),[H.key]):H.action===d.REPLACE&&(z[n]=H.key),D.forEach(function(e){e(H)})}function a(e){if(D.push(e),H)e(H);else{var t=M();z=[t.key],n(t)}return function(){D=D.filter(function(t){return t!==e})}}function o(e,t){c.loopAsync(U.length,function(t,n,a){h["default"](U[t],e,function(e){null!=e?a(e):n()})},function(e){I&&"string"==typeof e?I(e,function(e){t(e!==!1)}):t(e!==!1)})}function u(e){H&&s(H,e)||(B=e,o(e,function(t){if(B===e)if(t){if(e.action===d.PUSH){var a=w(H),r=w(e);r===a&&(e.action=d.REPLACE)}T(e)!==!1&&n(e)}else if(H&&e.action===d.POP){var s=z.indexOf(H.key),o=z.indexOf(e.key);-1!==s&&-1!==o&&A(s-o)}}))}function l(e){u(k(e,d.PUSH,b()))}function f(e){u(k(e,d.REPLACE,b()))}function m(){A(-1)}function v(){A(1)}function b(){return r(R)}function w(e){if(null==e||"string"==typeof e)return e;var t=e.pathname,n=e.search,a=e.hash,r=t;return n&&(r+=n),a&&(r+=a),r}function E(e){return w(e)}function k(e,t){var n=arguments.length<=2||void 0===arguments[2]?b():arguments[2];return"object"==typeof t&&("string"==typeof e&&(e=g["default"](e)),e=i({},e,{state:t}),t=n,n=arguments[3]||b()),p["default"](e,t,n)}function O(e){H?(x(H,e),n(H)):x(M(),e)}function x(e,t){e.state=i({},e.state,t),L(e.key,e.state)}function N(e){-1===U.indexOf(e)&&U.push(e)}function j(e){U=U.filter(function(t){return t!==e})}function P(e,t){"string"==typeof t&&(t=g["default"](t)),l(i({state:e},t))}function C(e,t){"string"==typeof t&&(t=g["default"](t)),f(i({state:e},t))}var S=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],M=S.getCurrentLocation,T=S.finishTransition,L=S.saveState,A=S.go,R=S.keyLength,I=S.getUserConfirmation;"number"!=typeof R&&(R=_);var U=[],z=[],D=[],H=void 0,B=void 0;return{listenBefore:e,listen:a,transitionTo:u,push:l,replace:f,go:A,goBack:m,goForward:v,createKey:b,createPath:w,createHref:E,createLocation:k,
+setState:y["default"](O,"setState is deprecated; use location.key to save state instead"),registerTransitionHook:y["default"](N,"registerTransitionHook is deprecated; use listenBefore instead"),unregisterTransitionHook:y["default"](j,"unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead"),pushState:y["default"](P,"pushState is deprecated; use push instead"),replaceState:y["default"](C,"replaceState is deprecated; use replace instead")}}n.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},u=e("deep-equal"),l=a(u),c=e("./AsyncUtils"),d=e("./Actions"),f=e("./createLocation"),p=a(f),m=e("./runTransitionHook"),h=a(m),v=e("./parsePath"),g=a(v),b=e("./deprecate"),y=a(b),_=6;n["default"]=o,t.exports=n["default"]},{"./Actions":33,"./AsyncUtils":34,"./createLocation":41,"./deprecate":42,"./parsePath":44,"./runTransitionHook":45,"deep-equal":30}],41:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){var e=arguments.length<=0||void 0===arguments[0]?"/":arguments[0],t=arguments.length<=1||void 0===arguments[1]?o.POP:arguments[1],n=arguments.length<=2||void 0===arguments[2]?null:arguments[2],a=arguments.length<=3||void 0===arguments[3]?null:arguments[3];"string"==typeof e&&(e=u["default"](e)),"object"==typeof t&&(e=s({},e,{state:t}),t=n||o.POP,n=a);var r=e.pathname||"/",i=e.search||"",l=e.hash||"",c=e.state||null;return{pathname:r,search:i,hash:l,state:c,action:t,key:n}}n.__esModule=!0;var s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},o=e("./Actions"),i=e("./parsePath"),u=a(i);n["default"]=r,t.exports=n["default"]},{"./Actions":33,"./parsePath":44}],42:[function(e,t,n){"use strict";function a(e){return e}n.__esModule=!0,n["default"]=a,t.exports=n["default"]},{}],43:[function(e,t,n){"use strict";function a(e){var t=e.match(/^https?:\/\/[^\/]*/);return null==t?e:e.substring(t[0].length)}n.__esModule=!0,n["default"]=a,t.exports=n["default"]},{}],44:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(e){var t=l["default"](e),n="",r="";"production"!==a.env.NODE_ENV?i["default"](e===t,'A path must be pathname + search + hash only, not a fully qualified URL like "%s"',e):void 0;var s=t.indexOf("#");-1!==s&&(r=t.substring(s),t=t.substring(0,s));var o=t.indexOf("?");return-1!==o&&(n=t.substring(o),t=t.substring(0,o)),""===t&&(t="/"),{pathname:t,search:n,hash:r}}n.__esModule=!0;var o=e("warning"),i=r(o),u=e("./extractPath"),l=r(u);n["default"]=s,t.exports=n["default"]}).call(this,e("_process"))},{"./extractPath":43,_process:1,warning:47}],45:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t,n){var r=e(t,n);e.length<2?n(r):"production"!==a.env.NODE_ENV?i["default"](void 0===r,'You should not "return" in a transition hook with a callback argument; call the callback instead'):void 0}n.__esModule=!0;var o=e("warning"),i=r(o);n["default"]=s,t.exports=n["default"]}).call(this,e("_process"))},{_process:1,warning:47}],46:[function(e,t,n){"use strict";var a=function(e,t,n,a,r,s,o,i){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,a,r,s,o,i],c=0;u=new Error(t.replace(/%s/g,function(){return l[c++]})),u.name="Invariant Violation"}throw u.framesToPop=1,u}};t.exports=a},{}],47:[function(e,t,n){"use strict";var a=function(){};t.exports=a},{}],48:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{user:e.auth.user,signedIn:e.auth.signedIn,signedOut:e.auth.signedOut}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i;var l=e("react"),c=a(l),d=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),u(t,[{key:"refresh",value:function(){window.location.reload()}},{key:"getMessage",value:function(){return this.props.signedIn?interpolate(gettext("You have signed in as %(username)s. Please refresh the page before continuing."),{username:this.props.signedIn.username},!0):this.props.signedOut?interpolate(gettext("%(username)s, you have been signed out. Please refresh the page before continuing."),{username:this.props.user.username},!0):void 0}},{key:"getClassName",value:function(){return this.props.signedIn||this.props.signedOut?"auth-message show":"auth-message"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName()},c["default"].createElement("div",{className:"container"},c["default"].createElement("p",{className:"lead"},this.getMessage()),c["default"].createElement("p",null,c["default"].createElement("button",{type:"button",className:"btn btn-default",onClick:this.refresh},gettext("Reload page"))," ",c["default"].createElement("span",{className:"hidden-xs hidden-sm text-muted"},gettext("or press F5 key.")))))}}]),t}(c["default"].Component);n["default"]=d},{react:"react"}],49:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=$("base").attr("href")+"user-avatar/",d=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"getSrc",value:function(){var e=this.props.size||100,t=c;return t+=this.props.user&&this.props.user.id?this.props.user.avatar_hash+"/"+e+"/"+this.props.user.id+".png":e+".png"}},{key:"render",value:function(){return l["default"].createElement("img",{src:this.getSrc(),className:this.props.className||"user-avatar",title:gettext("User avatar")})}}]),t}(l["default"].Component);n["default"]=d},{react:"react"}],50:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("moment"),l=a(u),c=e("react"),d=a(c),f=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"getReasonMessage",value:function(){return this.props.message.html?d["default"].createElement("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.props.message.html}}):d["default"].createElement("p",{className:"lead"},this.props.message.plain)}},{key:"getExpirationMessage",value:function(){return this.props.expires?this.props.expires.isAfter((0,l["default"])())?interpolate(gettext("This ban expires %(expires_on)s."),{expires_on:this.props.expires.fromNow()},!0):gettext("This ban has expired."):gettext("This ban is permanent.")}},{key:"render",value:function(){return d["default"].createElement("div",{className:"page page-error page-error-banned"},d["default"].createElement("div",{className:"container"},d["default"].createElement("div",{className:"message-panel"},d["default"].createElement("div",{className:"message-icon"},d["default"].createElement("span",{className:"material-icon"},"highlight_off")),d["default"].createElement("div",{className:"message-body"},this.getReasonMessage(),d["default"].createElement("p",{className:"message-footnote"},this.getExpirationMessage())))))}}]),t}(d["default"].Component);n["default"]=f},{moment:"moment",react:"react"}],51:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),d=a(c),f=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"render",value:function(){var e="btn "+this.props.className,t=this.props.disabled;return this.props.loading&&(e+=" btn-loading",t=!0),l["default"].createElement("button",{type:this.props.onClick?"button":"submit",className:e,disabled:t,onClick:this.props.onClick},this.props.children,this.props.loading?l["default"].createElement(d["default"],null):null)}}]),t}(l["default"].Component);n["default"]=f,f.defaultProps={className:"btn-default",type:"submit",loading:!1,disabled:!1,onClick:null}},{"./loader":60,react:"react"}],52:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../avatar"),d=(a(c),e("../button")),f=a(d),p=e("../../services/ajax"),m=a(p),h=e("../../services/snackbar"),v=a(h),g=$("base").attr("href")+"user-avatar",b=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.cropAvatar=function(){if(n.state.isLoading)return!1;n.setState({isLoading:!0});var e=n.props.upload?"crop_tmp":"crop_org",t=$(".crop-form");m["default"].post(n.props.user.api_url.avatar,{avatar:e,crop:{offset:t.cropit("offset"),zoom:t.cropit("zoom")}}).then(function(e){n.props.onComplete(e.avatar_hash,e.options),v["default"].success(e.detail)},function(e){400===e.status?(v["default"].error(e.detail),n.setState({isLoading:!1})):n.props.showError(e)})},n.state={isLoading:!1},n}return o(t,e),i(t,[{key:"getAvatarSize",value:function(){return this.props.upload?this.props.options.crop_tmp.size:this.props.options.crop_org.size}},{key:"getAvatarSecret",value:function(){return this.props.upload?this.props.options.crop_tmp.secret:this.props.options.crop_org.secret}},{key:"getAvatarHash",value:function(){return this.props.upload||this.props.user.avatar_hash}},{key:"getImagePath",value:function(){return[g,this.getAvatarSecret()+":"+this.getAvatarHash(),this.props.user.id+".png"].join("/")}},{key:"componentDidMount",value:function(){var e=this,t=$(".crop-form");t.width(this.getAvatarSize()),t.cropit({width:this.getAvatarSize(),height:this.getAvatarSize(),imageState:{src:this.getImagePath()},onImageLoaded:function(){if(e.props.upload){var n=t.cropit("zoom"),a=t.cropit("imageSize");if(a.width>a.height){var r=a.width*n,s=(r-e.getAvatarSize())/-2;t.cropit("offset",{x:s,y:0})}else if(a.width<a.height){var o=a.height*n,i=(o-e.getAvatarSize())/-2;t.cropit("offset",{x:0,y:i})}}else{var u=e.props.options.crop_org.crop;u&&(t.cropit("zoom",u.zoom),t.cropit("offset",{x:u.x,y:u.y}))}}})}},{key:"componentWillUnmount",value:function(){$(".crop-form").cropit("disable")}},{key:"render",value:function(){return l["default"].createElement("div",null,l["default"].createElement("div",{className:"modal-body modal-avatar-crop"},l["default"].createElement("div",{className:"crop-form"},l["default"].createElement("div",{className:"cropit-image-preview"}),l["default"].createElement("input",{type:"range",className:"cropit-image-zoom-input"}))),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("div",{className:"col-md-6 col-md-offset-3"},l["default"].createElement(f["default"],{onClick:this.cropAvatar,loading:this.state.isLoading,className:"btn-primary btn-block"},this.props.upload?gettext("Set avatar"):gettext("Crop image")),l["default"].createElement(f["default"],{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},gettext("Cancel")))))}}]),t}(l["default"].Component);n["default"]=b},{"../../services/ajax":91,"../../services/snackbar":99,"../avatar":49,"../button":51,react:"react"}],53:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Gallery=n.GalleryItem=void 0;var u=e("react"),l=a(u),c=e("../button"),d=a(c),f=e("../../index"),p=a(f),m=e("../../services/ajax"),h=a(m),v=e("../../services/snackbar"),g=a(v),b=e("../../utils/batch"),y=a(b),_=n.GalleryItem=function(e){function t(){var e,n,a,o;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=s(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.select=function(){a.props.select(a.props.image)},o=n,s(a,o)}return o(t,e),i(t,[{key:"getClassName",value:function(){return this.props.selection===this.props.image?this.props.disabled?"btn btn-avatar btn-disabled avatar-selected":"btn btn-avatar avatar-selected":this.props.disabled?"btn btn-avatar btn-disabled":"btn btn-avatar"}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",className:this.getClassName(),disabled:this.props.disabled,onClick:this.select},l["default"].createElement("img",{src:p["default"].get("MEDIA_URL")+this.props.image}))}}]),t}(l["default"].Component),w=n.Gallery=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"avatars-gallery"},l["default"].createElement("h3",null,this.props.name),l["default"].createElement("div",{className:"avatars-gallery-images"},(0,y["default"])(this.props.images,4,null).map(function(t,n){return l["default"].createElement("div",{className:"row",key:n},t.map(function(t,n){return l["default"].createElement("div",{className:"col-xs-3",key:n},t?l["default"].createElement(_,{image:t,disabled:e.props.disabled,select:e.props.select,selection:e.props.selection}):l["default"].createElement("div",{className:"blank-avatar"}))}))})))}}]),t}(l["default"].Component),E=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.select=function(e){n.setState({selection:e})},n.save=function(){return n.state.isLoading?!1:(n.setState({isLoading:!0}),void h["default"].post(n.props.user.api_url.avatar,{avatar:"galleries",image:n.state.selection}).then(function(e){n.setState({isLoading:!1}),g["default"].success(e.detail),n.props.onComplete(e.avatar_hash,e.options)},function(e){400===e.status?(g["default"].error(e.detail),n.setState({isLoading:!1})):n.props.showError(e)}))},n.state={selection:null,isLoading:!1},n}return o(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("div",null,l["default"].createElement("div",{className:"modal-body modal-avatar-gallery"},this.props.options.galleries.map(function(t,n){return l["default"].createElement(w,{name:t.name,images:t.images,selection:e.state.selection,disabled:e.state.isLoading,select:e.select,key:n})})),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-6 col-md-offset-3"},l["default"].createElement(d["default"],{onClick:this.save,loading:this.state.isLoading,disabled:!this.state.selection,className:"btn-primary btn-block"},this.state.selection?gettext("Save choice"):gettext("Select avatar")),l["default"].createElement(d["default"],{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},gettext("Cancel"))))))}}]),t}(l["default"].Component);n["default"]=E},{"../../index":85,"../../services/ajax":91,"../../services/snackbar":99,"../../utils/batch":103,"../button":51,react:"react"}],54:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../avatar"),d=a(c),f=e("../button"),p=a(f),m=e("../loader"),h=a(m),v=e("../../services/ajax"),g=a(v),b=e("../../services/snackbar"),y=a(b),_=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.setGravatar=function(){n.callApi("gravatar")},n.setGenerated=function(){n.callApi("generated")},n.state={isLoading:!1},n}return o(t,e),i(t,[{key:"callApi",value:function(e){var t=this;return this.state.isLoading?!1:(this.setState({isLoading:!0}),void g["default"].post(this.props.user.api_url.avatar,{avatar:e}).then(function(e){t.setState({isLoading:!1}),y["default"].success(e.detail),t.props.onComplete(e.avatar_hash,e.options)},function(e){400===e.status?(y["default"].error(e.detail),t.setState({isLoading:!1})):t.props.showError(e)}))}},{key:"getGravatarButton",value:function(){return this.props.options.gravatar?l["default"].createElement(p["default"],{onClick:this.setGravatar,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-gravatar"},gettext("Download my Gravatar")):null}},{key:"getCropButton",value:function(){return this.props.options.crop_org?l["default"].createElement(p["default"],{onClick:this.props.showCrop,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-crop"},gettext("Re-crop uploaded image")):null}},{key:"getUploadButton",value:function(){return this.props.options.upload?l["default"].createElement(p["default"],{onClick:this.props.showUpload,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-upload"},gettext("Upload new image")):null}},{key:"getGalleryButton",value:function(){return this.props.options.galleries?l["default"].createElement(p["default"],{onClick:this.props.showGallery,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-gallery"},gettext("Pick avatar from gallery")):null}},{key:"getAvatarPreview",value:function(){return this.state.isLoading?l["default"].createElement("div",{className:"avatar-preview preview-loading"},l["default"].createElement(d["default"],{user:this.props.user,size:"200"}),l["default"].createElement(h["default"],null)):l["default"].createElement("div",{className:"avatar-preview"},l["default"].createElement(d["default"],{user:this.props.user,size:"200"}))}},{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-body modal-avatar-index"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-5"},this.getAvatarPreview()),l["default"].createElement("div",{className:"col-md-7"},this.getGravatarButton(),l["default"].createElement(p["default"],{onClick:this.setGenerated,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-generate"},gettext("Generate my individual avatar")),this.getCropButton(),this.getUploadButton(),this.getGalleryButton())))}}]),t}(l["default"].Component);n["default"]=_},{"../../services/ajax":91,"../../services/snackbar":99,"../avatar":49,"../button":51,"../loader":60,react:"react"}],55:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{user:e.auth.user}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.ChangeAvatarError=void 0,n.select=i;var l=e("react"),c=a(l),d=e("./index"),f=a(d),p=e("./crop"),m=a(p),h=e("./upload"),v=a(h),g=e("./gallery"),b=a(g),y=e("../modal-loader"),_=a(y),w=e("../../reducers/users"),E=e("../../services/ajax"),k=a(E),O=e("../../services/store"),x=a(O),N=n.ChangeAvatarError=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),u(t,[{key:"getErrorReason",value:function(){return this.props.reason?c["default"].createElement("p",{dangerouslySetInnerHTML:{__html:this.props.reason}}):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"modal-body"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"remove_circle_outline")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},this.props.message),this.getErrorReason()))}}]),t}(c["default"].Component),j=function(e){function t(){var e,n,a,o;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=s(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.showError=function(e){a.setState({error:e})},a.showIndex=function(){a.setState({component:f["default"]})},a.showUpload=function(){a.setState({component:v["default"]})},a.showCrop=function(){a.setState({component:m["default"]})},a.showGallery=function(){a.setState({component:b["default"]})},a.completeFlow=function(e,t){x["default"].dispatch((0,w.updateAvatar)(a.props.user,e)),a.setState({component:f["default"],options:t})},o=n,s(a,o)}return o(t,e),u(t,[{key:"componentDidMount",value:function(){var e=this;k["default"].get(this.props.user.api_url.avatar).then(function(t){e.setState({component:f["default"],options:t,error:null})},function(t){e.showError(t)})}},{key:"getBody",value:function(){return this.state?this.state.error?c["default"].createElement(N,{message:this.state.error.detail,reason:this.state.error.reason}):c["default"].createElement(this.state.component,{options:this.state.options,user:this.props.user,onComplete:this.completeFlow,showError:this.showError,showIndex:this.showIndex,showCrop:this.showCrop,showUpload:this.showUpload,showGallery:this.showGallery}):c["default"].createElement(_["default"],null)}},{key:"getClassName",value:function(){return this.state&&this.state.error?"modal-dialog modal-message modal-change-avatar":"modal-dialog modal-change-avatar"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName(),role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Change your avatar"))),this.getBody()))}}]),t}(c["default"].Component);n["default"]=j},{"../../reducers/users":90,"../../services/ajax":91,"../../services/store":100,"../modal-loader":61,"./crop":52,"./gallery":53,"./index":54,"./upload":56,react:"react"}],56:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./crop"),d=a(c),f=e("../button"),p=a(f),m=e("../../services/ajax"),h=a(m),v=e("../../services/snackbar"),g=a(v),b=e("../../utils/file-size"),y=a(b),_=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.pickFile=function(){document.getElementById("avatar-hidden-upload").click()},n.uploadFile=function(){var e=document.getElementById("avatar-hidden-upload").files[0],t=n.validateFile(e);if(t)return void g["default"].error(t);n.setState({image:e,preview:URL.createObjectURL(e),progress:0});var a=new FormData;a.append("avatar","upload"),a.append("image",e),h["default"].upload(n.props.user.api_url.avatar,a,function(e){n.setState({progress:e})}).then(function(e){n.setState({options:e.options,uploaded:e.detail}),g["default"].info(gettext("Your image has been uploaded and you may now crop it."))},function(e){400===e.status?(g["default"].error(e.detail),n.setState({isLoading:!1,image:null,progress:0})):n.props.showError(e)})},n.state={image:null,preview:null,progress:0,uploaded:null},n}return o(t,e),i(t,[{key:"validateFile",value:function(e){if(e.size>this.props.options.upload.limit)return interpolate(gettext("Selected file is too big. (%(filesize)s)"),{filesize:(0,y["default"])(e.size)},!0);var t=gettext("Selected file type is not supported.");if(-1===this.props.options.upload.allowed_mime_types.indexOf(e.type))return t;var n=!1,a=e.name.toLowerCase();return this.props.options.upload.allowed_extensions.map(function(e){a.substr(-1*e.length)===e&&(n=!0)}),n?!1:t}},{key:"getUploadRequirements",value:function(e){var t=e.allowed_extensions.map(function(e){return e.substr(1)});return interpolate(gettext("%(files)s files smaller than %(limit)s"),{files:t.join(", "),limit:(0,y["default"])(e.limit)},!0)}},{key:"getUploadButton",value:function(){return l["default"].createElement("div",{className:"modal-body modal-avatar-upload"},l["default"].createElement(p["default"],{className:"btn-pick-file",onClick:this.pickFile},l["default"].createElement("div",{className:"material-icon"},"input"),gettext("Select file")),l["default"].createElement("p",{className:"text-muted"},this.getUploadRequirements(this.props.options.upload)))}},{key:"getUploadProgressLabel",value:function(){return interpolate(gettext("%(progress)s % complete"),{progress:this.state.progress},!0)}},{key:"getUploadProgress",value:function(){return l["default"].createElement("div",{className:"modal-body modal-avatar-upload"},l["default"].createElement("div",{className:"upload-progress"},l["default"].createElement("img",{src:this.state.preview}),l["default"].createElement("div",{className:"progress"},l["default"].createElement("div",{className:"progress-bar",role:"progressbar","aria-valuenow":"{this.state.progress}","aria-valuemin":"0","aria-valuemax":"100",style:{
+width:this.state.progress+"%"}},l["default"].createElement("span",{className:"sr-only"},this.getUploadProgressLabel())))))}},{key:"renderUpload",value:function(){return l["default"].createElement("div",null,l["default"].createElement("input",{type:"file",id:"avatar-hidden-upload",className:"hidden-file-upload",onChange:this.uploadFile}),this.state.image?this.getUploadProgress():this.getUploadButton(),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("div",{className:"col-md-6 col-md-offset-3"},l["default"].createElement(p["default"],{onClick:this.props.showIndex,disabled:!!this.state.image,className:"btn-default btn-block"},gettext("Cancel")))))}},{key:"renderCrop",value:function(){return l["default"].createElement(d["default"],{options:this.state.options,user:this.props.user,upload:this.state.uploaded,onComplete:this.props.onComplete,showError:this.props.showError,showIndex:this.props.showIndex})}},{key:"render",value:function(){return this.state.uploaded?this.renderCrop():this.renderUpload()}}]),t}(l["default"].Component);n["default"]=_},{"../../services/ajax":91,"../../services/snackbar":99,"../../utils/file-size":104,"../button":51,"./crop":52,react:"react"}],57:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"isValidated",value:function(){return"undefined"!=typeof this.props.validation}},{key:"getClassName",value:function(){var e="form-group";return this.isValidated()&&(e+=" has-feedback",e+=null===this.props.validation?" has-success":" has-error"),e}},{key:"getFeedback",value:function(){var e=this;return this.props.validation?l["default"].createElement("div",{className:"help-block errors"},this.props.validation.map(function(t,n){return l["default"].createElement("p",{key:e.props["for"]+"FeedbackItem"+n},t)})):null}},{key:"getFeedbackIcon",value:function(){return this.isValidated()?l["default"].createElement("span",{className:"material-icon form-control-feedback","aria-hidden":"true",key:this.props["for"]+"FeedbackIcon"},this.props.validation?"clear":"check"):null}},{key:"getFeedbackDescription",value:function(){return this.isValidated()?l["default"].createElement("span",{id:this.props["for"]+"_status",className:"sr-only"},this.props.validation?gettext("(error)"):gettext("(success)")):null}},{key:"getHelpText",value:function(){return this.props.helpText?l["default"].createElement("p",{className:"help-block"},this.props.helpText):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName()},l["default"].createElement("label",{className:"control-label "+(this.props.labelClass||""),htmlFor:this.props["for"]||""},this.props.label+":"),l["default"].createElement("div",{className:this.props.controlClass||""},this.props.children,this.getFeedbackIcon(),this.getFeedbackDescription(),this.getFeedback(),this.getHelpText(),this.props.extra||null))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],58:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=a(l),d=e("../utils/validators"),f=(0,d.required)(),p=function(e){function t(){var e,n,a,i;s(this,t);for(var u=arguments.length,l=Array(u),c=0;u>c;c++)l[c]=arguments[c];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),a.bindInput=function(e){return function(t){var n=r({},e,t.target.value),s=a.state.errors||{};s[e]=a.validateField(e,n[e]),n.errors=s,a.setState(n)}},a.handleSubmit=function(e){if(e.preventDefault(),!a.state.isLoading&&a.clean()){a.setState({isLoading:!0});var t=a.send();t?t.then(function(e){a.setState({isLoading:!1}),a.handleSuccess(e)},function(e){a.setState({isLoading:!1}),a.handleError(e)}):a.setState({isLoading:!1})}},i=n,o(a,i)}return i(t,e),u(t,[{key:"validate",value:function(){var e={};if(!this.state.validators)return e;var t={required:this.state.validators.required||this.state.validators,optional:this.state.validators.optional||{}},n=[];for(var a in t.required)t.required.hasOwnProperty(a)&&t.required[a]&&n.push(a);for(var a in t.optional)t.optional.hasOwnProperty(a)&&t.optional[a]&&n.push(a);for(var r in n){var a=n[r],s=this.validateField(a,this.state[a]);null===s?e[a]=null:s&&(e[a]=s)}return e}},{key:"isValid",value:function(){var e=this.validate();for(var t in e)if(e.hasOwnProperty(t)&&null!==e[t])return!1;return!0}},{key:"validateField",value:function(e,t){var n=[];if(!this.state.validators)return n;var a={required:(this.state.validators.required||this.state.validators)[e],optional:(this.state.validators.optional||{})[e]},r=f(t)||!1;if(a.required){if(r)n=[r];else for(var s in a.required){var o=a.required[s](t);o&&n.push(o)}return n.length?n:null}if(r===!1&&a.optional){for(var s in a.optional){var o=a.optional[s](t);o&&n.push(o)}return n.length?n:null}return!1}},{key:"clean",value:function(){return!0}},{key:"send",value:function(){return null}},{key:"handleSuccess",value:function(e){}},{key:"handleError",value:function(e){}}]),t}(c["default"].Component);n["default"]=p},{"../utils/validators":109,react:"react"}],59:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"isActive",value:function(){return this.props.path?0===document.location.pathname.indexOf(this.props.path):!1}},{key:"getClassName",value:function(){return this.isActive()?(this.props.className||"")+" "+(this.props.activeClassName||"active"):this.props.className||""}},{key:"render",value:function(){return l["default"].createElement("li",{className:this.getClassName()},this.props.children)}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],60:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:this.props.className||"loader"},l["default"].createElement("div",{className:"loader-spinning-wheel"}))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],61:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),d=a(c),f=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-body modal-loader"},l["default"].createElement(d["default"],null))}}]),t}(l["default"].Component);n["default"]=f},{"./loader":60,react:"react"}],62:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.UsernameHistory=n.ChangeUsernameLoading=n.NoChangesLeft=n.ChangeUsername=void 0;var l=e("moment"),c=r(l),d=e("react"),f=r(d),p=e("../avatar"),m=r(p),h=e("../button"),v=r(h),g=e("../form"),b=r(g),y=e("../form-group"),_=r(y),w=e("../loader"),E=r(w),k=e("../../index"),O=r(k),x=e("../../reducers/username-history"),N=e("../../reducers/users"),j=e("../../services/ajax"),P=r(j),C=e("../../services/page-title"),S=r(C),M=e("../../services/snackbar"),T=r(M),L=e("../../services/store"),A=r(L),R=e("../../utils/random"),I=a(R),U=e("../../utils/validators"),z=a(U),D=n.ChangeUsername=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={username:"",validators:{username:[z.usernameContent(),z.usernameMinLength({username_length_min:e.options.length_min}),z.usernameMaxLength({username_length_max:e.options.length_max})]},isLoading:!1},n}return i(t,e),u(t,[{key:"getHelpText",value:function(){var e=[];if(this.props.options.changes_left>0){var t=ngettext("You can change your username %(changes_left)s more time.","You can change your username %(changes_left)s more times.",this.props.options.changes_left);e.push(interpolate(t,{changes_left:this.props.options.changes_left},!0))}if(this.props.user.acl.name_changes_expire>0){var t=ngettext("Used changes redeem after %(name_changes_expire)s day.","Used changes redeem after %(name_changes_expire)s days.",this.props.user.acl.name_changes_expire);e.push(interpolate(t,{name_changes_expire:this.props.user.acl.name_changes_expire},!0))}return e.length?e.join(" "):null}},{key:"clean",value:function(){var e=this.validate();return e.username?(T["default"].error(e.username[0]),!1):this.state.username.trim()===this.props.user.username?(T["default"].info(gettext("Your new username is same as current one.")),!1):!0}},{key:"send",value:function(){return P["default"].post(this.props.user.api_url.username,{username:this.state.username})}},{key:"handleSuccess",value:function(e){this.setState({username:""}),this.props.complete(e.username,e.slug,e.options)}},{key:"handleError",value:function(e){T["default"].apiError(e)}},{key:"render",value:function(){return f["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},f["default"].createElement("div",{className:"panel panel-default panel-form"},f["default"].createElement("div",{className:"panel-heading"},f["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),f["default"].createElement("div",{className:"panel-body"},f["default"].createElement(_["default"],{label:gettext("New username"),"for":"id_username",labelClass:"col-sm-4",controlClass:"col-sm-8",helpText:this.getHelpText()},f["default"].createElement("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),f["default"].createElement("div",{className:"panel-footer"},f["default"].createElement("div",{className:"row"},f["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},f["default"].createElement(v["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change username")))))))}}]),t}(b["default"]),H=n.NoChangesLeft=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getHelpText",value:function(){return this.props.options.next_on?interpolate(gettext("You will be able to change your username %(next_change)s."),{next_change:this.props.options.next_on.fromNow()},!0):gettext("You have used up available name changes.")}},{key:"render",value:function(){return f["default"].createElement("div",{className:"panel panel-default panel-form"},f["default"].createElement("div",{className:"panel-heading"},f["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),f["default"].createElement("div",{className:"panel-body panel-message-body"},f["default"].createElement("div",{className:"message-icon"},f["default"].createElement("span",{className:"material-icon"},"info_outline")),f["default"].createElement("div",{className:"message-body"},f["default"].createElement("p",{className:"lead"},gettext("You can't change your username at the moment.")),f["default"].createElement("p",{className:"help-block"},this.getHelpText()))))}}]),t}(f["default"].Component),B=n.ChangeUsernameLoading=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"render",value:function(){return f["default"].createElement("div",{className:"panel panel-default panel-form"},f["default"].createElement("div",{className:"panel-heading"},f["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),f["default"].createElement("div",{className:"panel-body panel-body-loading"},f["default"].createElement(E["default"],{className:"loader loader-spaced"})))}}]),t}(f["default"].Component),G=n.UsernameHistory=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"renderUserAvatar",value:function(e){return e.changed_by?f["default"].createElement("a",{href:e.changed_by.absolute_url,className:"user-avatar"},f["default"].createElement(m["default"],{user:e.changed_by,size:"100"})):f["default"].createElement("span",{className:"user-avatar"},f["default"].createElement(m["default"],{size:"100"}))}},{key:"renderUsername",value:function(e){return e.changed_by?f["default"].createElement("a",{href:e.changed_by.absolute_url,className:"item-title"},e.changed_by.username):f["default"].createElement("span",{className:"item-title"},e.changed_by_username)}},{key:"renderHistory",value:function(){var e=this;return f["default"].createElement("div",{className:"username-history ui-ready"},f["default"].createElement("ul",{className:"list-group"},this.props.changes.map(function(t){return f["default"].createElement("li",{className:"list-group-item",key:t.id},f["default"].createElement("div",{className:"username-change-avatar"},e.renderUserAvatar(t)),f["default"].createElement("div",{className:"username-change-author"},e.renderUsername(t)),f["default"].createElement("div",{className:"username-change"},t.old_username,f["default"].createElement("span",{className:"material-icon"},"arrow_forward"),t.new_username),f["default"].createElement("div",{className:"username-change-date"},f["default"].createElement("abbr",{title:t.changed_on.format("LLL")},t.changed_on.fromNow())))})))}},{key:"renderEmptyHistory",value:function(){return f["default"].createElement("div",{className:"username-history ui-ready"},f["default"].createElement("ul",{className:"list-group"},f["default"].createElement("li",{className:"list-group-item empty-message"},gettext("No name changes have been recorded for your account."))))}},{key:"renderHistoryPreview",value:function(){return f["default"].createElement("div",{className:"username-history ui-preview"},f["default"].createElement("ul",{className:"list-group"},I.range(3,5).map(function(e){return f["default"].createElement("li",{className:"list-group-item",key:e},f["default"].createElement("div",{className:"username-change-avatar"},f["default"].createElement("span",{className:"user-avatar"},f["default"].createElement(m["default"],{size:"100"}))),f["default"].createElement("div",{className:"username-change-author"},f["default"].createElement("span",{className:"ui-preview-text",style:{width:I["int"](30,100)+"px"}}," ")),f["default"].createElement("div",{className:"username-change"},f["default"].createElement("span",{className:"ui-preview-text",style:{width:I["int"](30,50)+"px"}}," "),f["default"].createElement("span",{className:"material-icon"},"arrow_forward"),f["default"].createElement("span",{className:"ui-preview-text",style:{width:I["int"](30,50)+"px"}}," ")),f["default"].createElement("div",{className:"username-change-date"},f["default"].createElement("span",{className:"ui-preview-text",style:{width:I["int"](50,100)+"px"}}," ")))})))}},{key:"render",value:function(){return this.props.isLoaded?this.props.changes.length?this.renderHistory():this.renderEmptyHistory():this.renderHistoryPreview()}}]),t}(f["default"].Component),q=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.onComplete=function(e,t,a){n.setState({options:a}),A["default"].dispatch((0,x.addNameChange)({username:e,slug:t},n.props.user,n.props.user)),A["default"].dispatch((0,N.updateUsername)(n.props.user,e,t)),T["default"].success(gettext("Your username has been changed successfully."))},n.state={isLoaded:!1,options:null},n}return i(t,e),u(t,[{key:"componentDidMount",value:function(){var e=this;S["default"].set({title:gettext("Change username"),parent:gettext("Change your options")}),Promise.all([P["default"].get(this.props.user.api_url.username),P["default"].get(O["default"].get("USERNAME_CHANGES_API"),{user:this.props.user.id})]).then(function(t){e.setState({isLoaded:!0,options:{changes_left:t[0].changes_left,length_min:t[0].length_min,length_max:t[0].length_max,next_on:t[0].next_on?(0,c["default"])(t[0].next_on):null}}),A["default"].dispatch((0,x.dehydrate)(t[1].results))})}},{key:"getChangeForm",value:function(){return this.state.isLoaded?this.state.options.changes_left>0?f["default"].createElement(D,{user:this.props.user,options:this.state.options,complete:this.onComplete}):f["default"].createElement(H,{options:this.state.options}):f["default"].createElement(B,null)}},{key:"render",value:function(){return f["default"].createElement("div",null,this.getChangeForm(),f["default"].createElement(G,{isLoaded:this.state.isLoaded,changes:this.props["username-history"]}))}}]),t}(f["default"].Component);n["default"]=q},{"../../index":85,"../../reducers/username-history":89,"../../reducers/users":90,"../../services/ajax":91,"../../services/page-title":98,"../../services/snackbar":99,"../../services/store":100,"../../utils/random":107,"../../utils/validators":109,"../avatar":49,"../button":51,"../form":58,"../form-group":57,"../loader":60,moment:"moment",react:"react"}],63:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../button"),d=a(c),f=e("../form"),p=a(f),m=e("../form-group"),h=a(m),v=e("../select"),g=a(v),b=e("../yes-no-switch"),y=a(b),_=e("../../reducers/auth"),w=e("../../services/ajax"),E=a(w),k=e("../../services/page-title"),O=a(k),x=e("../../services/snackbar"),N=a(x),j=e("../../services/store"),P=a(j),C=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,is_hiding_presence:e.user.is_hiding_presence,limits_private_thread_invites_to:e.user.limits_private_thread_invites_to,subscribe_to_started_threads:e.user.subscribe_to_started_threads,subscribe_to_replied_threads:e.user.subscribe_to_replied_threads,errors:{}},n.privateThreadInvitesChoices=[{value:0,icon:"help_outline",label:gettext("Everybody")},{value:1,icon:"done_all",label:gettext("Users I follow")},{value:2,icon:"highlight_off",label:gettext("Nobody")}],n.subscribeToChoices=[{value:0,icon:"bookmark_border",label:gettext("No")},{value:1,icon:"bookmark",label:gettext("Bookmark")},{value:2,icon:"mail",label:gettext("Bookmark with e-mail notification")}],n}return o(t,e),i(t,[{key:"send",value:function(){return E["default"].post(this.props.user.api_url.options,{is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})}},{key:"handleSuccess",value:function(){P["default"].dispatch((0,_.patchUser)({is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})),N["default"].success(gettext("Your forum options have been changed."))}},{key:"handleError",value:function(e){400===e.status?N["default"].error(gettext("Please reload page and try again.")):N["default"].apiError(e)}},{key:"componentDidMount",value:function(){O["default"].set({title:gettext("Forum options"),parent:gettext("Change your options")})}},{key:"render",value:function(){return l["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},l["default"].createElement("div",{className:"panel panel-default panel-form"},l["default"].createElement("div",{className:"panel-heading"},l["default"].createElement("h3",{className:"panel-title"},gettext("Change forum options"))),l["default"].createElement("div",{className:"panel-body"},l["default"].createElement("fieldset",null,l["default"].createElement("legend",null,gettext("Privacy settings")),l["default"].createElement(h["default"],{label:gettext("Hide my presence"),helpText:gettext("If you hide your presence, only members with permission to see hidden users will see when you are online."),"for":"id_is_hiding_presence",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(y["default"],{id:"id_is_hiding_presence",disabled:this.state.isLoading,iconOn:"visibility",iconOff:"visibility_off",labelOn:gettext("Show my presence to other users"),labelOff:gettext("Hide my presence from other users"),onChange:this.bindInput("is_hiding_presence"),value:this.state.is_hiding_presence})),l["default"].createElement(h["default"],{label:gettext("Private thread invitations"),"for":"id_limits_private_thread_invites_to",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(g["default"],{id:"id_limits_private_thread_invites_to",disabled:this.state.isLoading,onChange:this.bindInput("limits_private_thread_invites_to"),value:this.state.limits_private_thread_invites_to,choices:this.privateThreadInvitesChoices}))),l["default"].createElement("fieldset",null,l["default"].createElement("legend",null,gettext("Automatic subscriptions")),l["default"].createElement(h["default"],{label:gettext("Threads I start"),"for":"id_subscribe_to_started_threads",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(g["default"],{id:"id_subscribe_to_started_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_started_threads"),value:this.state.subscribe_to_started_threads,choices:this.subscribeToChoices})),l["default"].createElement(h["default"],{label:gettext("Threads I reply to"),"for":"id_subscribe_to_replied_threads",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(g["default"],{id:"id_subscribe_to_replied_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_replied_threads"),value:this.state.subscribe_to_replied_threads,choices:this.subscribeToChoices})))),l["default"].createElement("div",{className:"panel-footer"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},l["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Save changes")))))))}}]),t}(p["default"]);n["default"]=C},{"../../reducers/auth":86,"../../services/ajax":91,"../../services/page-title":98,"../../services/snackbar":99,"../../services/store":100,"../button":51,"../form":58,"../form-group":57,"../select":73,"../yes-no-switch":84,react:"react"}],64:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactNav=n.SideNav=void 0;var u=e("react"),l=a(u),c=e("react-router"),d=e("../li"),f=a(d),p=e("../../index");a(p),n.SideNav=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"list-group nav-side"},this.props.options.map(function(t){return l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/",className:"list-group-item",activeClassName:"active",key:t.component},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name)}))}}]),t}(l["default"].Component),n.CompactNav=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("ul",{className:"dropdown-menu",role:"menu"},this.props.options.map(function(t){return l["default"].createElement(f["default"],{path:e.props.baseUrl+t.component+"/",key:t.component},l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/"},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name))}))}}]),t}(l["default"].Component)},{"../../index":85,"../li":59,react:"react","react-router":"react-router"}],65:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{tick:e.tick.tick,user:e.auth.user,"username-history":e["username-history"]}}function u(){return[{path:w["default"].get("USERCP_URL")+"forum-options/",component:(0,f.connect)(i)(h["default"])},{path:w["default"].get("USERCP_URL")+"change-username/",component:(0,f.connect)(i)(g["default"])
+},{path:w["default"].get("USERCP_URL")+"sign-in-credentials/",component:(0,f.connect)(i)(y["default"])}]}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i,n.paths=u;var c=e("react"),d=a(c),f=e("react-redux"),p=e("./navs"),m=e("./forum-options"),h=a(m),v=e("./change-username"),g=a(v),b=e("./sign-in-credentials"),y=a(b),_=e("../../index"),w=a(_),E=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.toggleNav=function(){n.state.dropdown?n.setState({dropdown:!1}):n.setState({dropdown:!0})},n.state={dropdown:!1},n}return o(t,e),l(t,[{key:"getToggleNavClassName",value:function(){return this.state.dropdown?"btn btn-default btn-icon open":"btn btn-default btn-icon"}},{key:"getCompactNavClassName",value:function(){return this.state.dropdown?"compact-nav open":"compact-nav"}},{key:"render",value:function(){return d["default"].createElement("div",{className:"page page-options"},d["default"].createElement("div",{className:"page-header"},d["default"].createElement("div",{className:"container"},d["default"].createElement("h1",{className:"pull-left"},gettext("Change your options")),d["default"].createElement("button",{className:"btn btn-default btn-icon btn-dropdown-toggle hidden-md hidden-lg",type:"button",onClick:this.toggleNav,"aria-haspopup":"true","aria-expanded":this.state.dropdown?"true":"false"},d["default"].createElement("i",{className:"material-icon"},"menu")))),d["default"].createElement("div",{className:this.getCompactNavClassName()},d["default"].createElement(p.CompactNav,{options:w["default"].get("USER_OPTIONS"),baseUrl:w["default"].get("USERCP_URL")})),d["default"].createElement("div",{className:"container"},d["default"].createElement("div",{className:"row"},d["default"].createElement("div",{className:"col-md-3 hidden-xs hidden-sm"},d["default"].createElement(p.SideNav,{options:w["default"].get("USER_OPTIONS"),baseUrl:w["default"].get("USERCP_URL")})),d["default"].createElement("div",{className:"col-md-9"},this.props.children))))}}]),t}(d["default"].Component);n["default"]=E},{"../../index":85,"./change-username":62,"./forum-options":63,"./navs":64,"./sign-in-credentials":66,react:"react","react-redux":"react-redux"}],66:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.ChangePassword=n.ChangeEmail=void 0;var l=e("react"),c=r(l),d=e("../button"),f=r(d),p=e("../form"),m=r(p),h=e("../form-group"),v=r(h),g=e("../../index"),b=r(g),y=e("../../services/ajax"),_=r(y),w=e("../../services/page-title"),E=r(w),k=e("../../services/snackbar"),O=r(k),x=e("../../utils/validators"),N=a(x),j=n.ChangeEmail=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={new_email:"",password:"",validators:{new_email:[N.email()],password:[]},isLoading:!1},n}return i(t,e),u(t,[{key:"clean",value:function(){var e=this.validate(),t=[this.state.new_email.trim().length,this.state.password.trim().length];return-1!==t.indexOf(0)?(O["default"].error(gettext("Fill out all fields.")),!1):e.new_email?(O["default"].error(e.new_email[0]),!1):!0}},{key:"send",value:function(){return _["default"].post(this.props.user.api_url.change_email,{new_email:this.state.new_email,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_email:"",password:""}),O["default"].success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_email?O["default"].error(e.new_email):O["default"].error(e.password):O["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change e-mail address"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(v["default"],{label:gettext("New e-mail"),"for":"id_new_email",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"text",id:"id_new_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_email"),value:this.state.new_email})),c["default"].createElement("hr",null),c["default"].createElement(v["default"],{label:gettext("Your current password"),"for":"id_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},c["default"].createElement(f["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change e-mail")))))))}}]),t}(m["default"]),P=n.ChangePassword=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={new_password:"",repeat_password:"",password:"",validators:{new_password:[N.passwordMinLength(b["default"].get("SETTINGS"))],repeat_password:[],password:[]},isLoading:!1},n}return i(t,e),u(t,[{key:"clean",value:function(){var e=this.validate(),t=[this.state.new_password.trim().length,this.state.repeat_password.trim().length,this.state.password.trim().length];return-1!==t.indexOf(0)?(O["default"].error(gettext("Fill out all fields.")),!1):e.new_password?(O["default"].error(e.new_password[0]),!1):this.state.new_password.trim()!==this.state.repeat_password.trim()?(O["default"].error(gettext("New passwords are different.")),!1):!0}},{key:"send",value:function(){return _["default"].post(this.props.user.api_url.change_password,{new_password:this.state.new_password,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_password:"",repeat_password:"",password:""}),O["default"].success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_password?O["default"].error(e.new_password):O["default"].error(e.password):O["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change password"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(v["default"],{label:gettext("New password"),"for":"id_new_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_new_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_password"),value:this.state.new_password})),c["default"].createElement(v["default"],{label:gettext("Repeat password"),"for":"id_repeat_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_repeat_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("repeat_password"),value:this.state.repeat_password})),c["default"].createElement("hr",null),c["default"].createElement(v["default"],{label:gettext("Your current password"),"for":"id_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},c["default"].createElement(f["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change password")))))))}}]),t}(m["default"]),C=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"componentDidMount",value:function(){E["default"].set({title:gettext("Change email or password"),parent:gettext("Change your options")})}},{key:"render",value:function(){return c["default"].createElement("div",null,c["default"].createElement(j,{user:this.props.user}),c["default"].createElement(P,{user:this.props.user}),c["default"].createElement("p",{className:"message-line"},c["default"].createElement("span",{className:"material-icon"},"warning"),c["default"].createElement("a",{href:b["default"].get("FORGOTTEN_PASSWORD_URL")},gettext("Change forgotten password"))))}}]),t}(c["default"].Component);n["default"]=C},{"../../index":85,"../../services/ajax":91,"../../services/page-title":98,"../../services/snackbar":99,"../../utils/validators":109,"../button":51,"../form":58,"../form-group":57,react:"react"}],67:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.LABELS=n.STYLES=void 0;var u=e("react"),l=a(u),c=e("../services/zxcvbn"),d=a(c),f=n.STYLES=["progress-bar-danger","progress-bar-warning","progress-bar-warning","progress-bar-primary","progress-bar-success"],p=n.LABELS=[gettext("Entered password is very weak."),gettext("Entered password is weak."),gettext("Entered password is average."),gettext("Entered password is strong."),gettext("Entered password is very strong.")],m=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n._score=0,n._password=null,n._inputs=[],n}return o(t,e),i(t,[{key:"getScore",value:function(e,t){var n=this,a=!1;return e.trim()!==this._password&&(a=!0),t.length!==this._inputs.length?a=!0:t.map(function(e,t){e.trim()!==n._inputs[t]&&(a=!0)}),a&&(this._score=d["default"].scorePassword(e,t),this._password=e.trim(),this._inputs=t.map(function(e){return e.trim()})),this._score}},{key:"render",value:function(){var e=this.getScore(this.props.password,this.props.inputs);return l["default"].createElement("div",{className:"help-block password-strength"},l["default"].createElement("div",{className:"progress"},l["default"].createElement("div",{className:"progress-bar "+f[e],style:{width:20+20*e+"%"},role:"progress-bar","aria-valuenow":e,"aria-valuemin":"0","aria-valuemax":"4"},l["default"].createElement("span",{className:"sr-only"},p[e]))),l["default"].createElement("p",{className:"text-small"},p[e]))}}]),t}(l["default"].Component);n["default"]=m},{"../services/zxcvbn":101,react:"react"}],68:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),d=a(c),f=e("./register.js"),p=a(f),m=e("../services/captcha"),h=a(m),v=e("../services/modal"),g=a(v),b=e("../services/snackbar"),y=a(b),_=e("../services/zxcvbn"),w=a(_),E=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.showRegisterModal=function(){"closed"===misago.get("SETTINGS").account_activation?y["default"].info(gettext("New registrations are currently disabled.")):n.state.isLoaded?g["default"].show(p["default"]):(n.setState({isLoading:!0}),Promise.all([h["default"].load(),w["default"].load()]).then(function(){n.state.isLoaded||n.setState({isLoading:!1,isLoaded:!1}),g["default"].show(p["default"])}))},n.state={isLoading:!1,isLoaded:!1},n}return o(t,e),i(t,[{key:"getClassName",value:function(){return this.props.className+(this.state.isLoading?" btn-loading":"")}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",onClick:this.showRegisterModal,className:"btn "+this.getClassName(),disabled:this.state.isLoaded},gettext("Register"),this.state.isLoading?l["default"].createElement(d["default"],null):null)}}]),t}(l["default"].Component);n["default"]=E},{"../services/captcha":93,"../services/modal":97,"../services/snackbar":99,"../services/zxcvbn":101,"./loader":60,"./register.js":69,react:"react"}],69:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.RegisterComplete=n.RegisterForm=void 0;var l=e("react"),c=r(l),d=e("./button"),f=r(d),p=e("./form"),m=r(p),h=e("./form-group"),v=r(h),g=e("./password-strength"),b=r(g),y=e("../index"),_=r(y),w=e("../services/ajax"),E=r(w),k=e("../services/auth"),O=r(k),x=e("../services/captcha"),N=r(x),j=e("../services/modal"),P=r(j),C=e("../services/snackbar"),S=r(C),M=e("../utils/banned-page"),T=r(M),L=e("../utils/validators"),A=a(L),R=n.RegisterForm=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,username:"",email:"",password:"",captcha:"",validators:{username:[A.usernameContent(),A.usernameMinLength(_["default"].get("SETTINGS")),A.usernameMaxLength(_["default"].get("SETTINGS"))],email:[A.email()],password:[A.passwordMinLength(_["default"].get("SETTINGS"))],captcha:N["default"].validator()},errors:{}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(S["default"].error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return E["default"].post(_["default"].get("USERS_API"),{username:this.state.username,email:this.state.email,password:this.state.password,captcha:this.state.captcha})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),S["default"].error(gettext("Form contains errors."))):403===e.status&&e.ban?((0,T["default"])(e.ban),P["default"].hide()):S["default"].apiError(e)}},{key:"getLegalFootNote",value:function(){return _["default"].get("TERMS_OF_SERVICE_URL")?c["default"].createElement("a",{href:_["default"].get("TERMS_OF_SERVICE_URL"),target:"_blank"},gettext("By registering you agree to site's terms and conditions.")):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"modal-dialog modal-register",role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Register"))),c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"modal-body"},c["default"].createElement(v["default"],{label:gettext("Username"),"for":"id_username",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.username},c["default"].createElement("input",{type:"text",id:"id_username",className:"form-control","aria-describedby":"id_username_status",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username})),c["default"].createElement(v["default"],{label:gettext("E-mail"),"for":"id_email",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.email},c["default"].createElement("input",{type:"text",id:"id_email",className:"form-control","aria-describedby":"id_email_status",disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email})),c["default"].createElement(v["default"],{label:gettext("Password"),"for":"id_password",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.password,extra:c["default"].createElement(b["default"],{password:this.state.password,inputs:[this.state.username,this.state.email]})},c["default"].createElement("input",{type:"password",id:"id_password",className:"form-control","aria-describedby":"id_password_status",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password})),N["default"].component({form:this,labelClass:"col-sm-4",controlClass:"col-sm-8"})),c["default"].createElement("div",{className:"modal-footer"},this.getLegalFootNote(),c["default"].createElement(f["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Register account"))))))}}]),t}(m["default"]),I=n.RegisterComplete=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getLead",value:function(){return"user"===this.props.activation?gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in."):"admin"===this.props.activation?gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in."):void 0}},{key:"getSubscript",value:function(){return"user"===this.props.activation?gettext("We have sent an e-mail to %(email)s with link that you have to click to activate your account."):"admin"===this.props.activation?gettext("We will send an e-mail to %(email)s when this takes place."):void 0}},{key:"render",value:function(){return c["default"].createElement("div",{className:"modal-dialog modal-message modal-register",role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Registration complete"))),c["default"].createElement("div",{className:"modal-body"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"info_outline")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},interpolate(this.getLead(),{username:this.props.username},!0)),c["default"].createElement("p",null,interpolate(this.getSubscript(),{email:this.props.email},!0))))))}}]),t}(c["default"].Component),U=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.completeRegistration=function(e){"active"===e.activation?(P["default"].hide(),O["default"].signIn(e)):n.setState({complete:e})},n.state={complete:!1},n}return i(t,e),u(t,[{key:"render",value:function(){return this.state.complete?c["default"].createElement(I,{activation:this.state.complete.activation,username:this.state.complete.username,email:this.state.complete.email}):c["default"].createElement(R,{callback:this.completeRegistration})}}]),t}(c["default"].Component);n["default"]=U},{"../index":85,"../services/ajax":91,"../services/auth":92,"../services/captcha":93,"../services/modal":97,"../services/snackbar":99,"../utils/banned-page":102,"../utils/validators":109,"./button":51,"./form":58,"./form-group":57,"./password-strength":67,react:"react"}],70:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.LinkSent=n.RequestLinkForm=void 0;var l=e("react"),c=r(l),d=e("../index"),f=r(d),p=e("./button"),m=r(p),h=e("./form"),v=r(h),g=e("../services/ajax"),b=r(g),y=e("../services/snackbar"),_=r(y),w=e("../utils/validators"),E=a(w),k=e("../utils/banned-page"),O=r(k),x=n.RequestLinkForm=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,email:"",validators:{email:[E.email()]}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(_["default"].error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return b["default"].post(f["default"].get("SEND_ACTIVATION_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["already_active","inactive_admin"].indexOf(e.code)>-1?_["default"].info(e.detail):403===e.status&&e.ban?(0,O["default"])(e.ban):_["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-activation-link"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"form-group"},c["default"].createElement("div",{className:"control-input"},c["default"].createElement("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),c["default"].createElement(m["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Send link"))))}}]),t}(v["default"]),N=n.LinkSent=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getMessage",value:function(){return interpolate(gettext("Activation link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-activation-link well-done"},c["default"].createElement("div",{className:"done-message"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"check")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",null,this.getMessage())),c["default"].createElement("button",{type:"button",className:"btn btn-primary btn-block",onClick:this.props.callback},gettext("Request another link"))))}}]),t}(c["default"].Component),j=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.complete=function(e){n.setState({complete:e})},n.reset=function(){n.setState({complete:!1})},n.state={complete:!1},n}return i(t,e),u(t,[{key:"render",value:function(){return this.state.complete?c["default"].createElement(N,{user:this.state.complete,callback:this.reset}):c["default"].createElement(x,{callback:this.complete})}}]),t}(c["default"].Component);n["default"]=j},{"../index":85,"../services/ajax":91,"../services/snackbar":99,"../utils/banned-page":102,"../utils/validators":109,"./button":51,"./form":58,react:"react"}],71:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.AccountInactivePage=n.LinkSent=n.RequestResetForm=void 0;var l=e("react"),c=r(l),d=e("react-dom"),f=r(d),p=e("../index"),m=r(p),h=e("./button"),v=r(h),g=e("./form"),b=r(g),y=e("../services/ajax"),_=r(y),w=e("../services/snackbar"),E=r(w),k=e("../utils/validators"),O=a(k),x=e("../utils/banned-page"),N=r(x),j=n.RequestResetForm=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,email:"",validators:{email:[O.email()]}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(E["default"].error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return _["default"].post(m["default"].get("SEND_PASSWORD_RESET_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["inactive_user","inactive_admin"].indexOf(e.code)>-1?this.props.showInactivePage(e):403===e.status&&e.ban?(0,N["default"])(e.ban):E["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-password-reset"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"form-group"},c["default"].createElement("div",{className:"control-input"},c["default"].createElement("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),c["default"].createElement(v["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Send link"))))}}]),t}(b["default"]),P=n.LinkSent=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getMessage",value:function(){return interpolate(gettext("Reset password link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-password-reset well-done"},c["default"].createElement("div",{className:"done-message"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"check")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",null,this.getMessage())),c["default"].createElement("button",{type:"button",className:"btn btn-primary btn-block",onClick:this.props.callback},gettext("Request another link"))))}}]),t}(c["default"].Component),C=n.AccountInactivePage=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getActivateButton",value:function(){return"inactive_user"===this.props.activation?c["default"].createElement("p",null,c["default"].createElement("a",{href:m["default"].get("REQUEST_ACTIVATION_URL")},gettext("Activate your account."))):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"page page-message page-message-info page-forgotten-password-inactive"},c["default"].createElement("div",{className:"container"},c["default"].createElement("div",{className:"message-panel"
+},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"info_outline")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},gettext("Your account is inactive.")),c["default"].createElement("p",null,this.props.message),this.getActivateButton()))))}}]),t}(c["default"].Component),S=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.complete=function(e){n.setState({complete:e})},n.reset=function(){n.setState({complete:!1})},n.state={complete:!1},n}return i(t,e),u(t,[{key:"showInactivePage",value:function(e){f["default"].render(c["default"].createElement(C,{activation:e.code,message:e.detail}),document.getElementById("page-mount"))}},{key:"render",value:function(){return this.state.complete?c["default"].createElement(P,{user:this.state.complete,callback:this.reset}):c["default"].createElement(j,{callback:this.complete,showInactivePage:this.showInactivePage})}}]),t}(c["default"].Component);n["default"]=S},{"../index":85,"../services/ajax":91,"../services/snackbar":99,"../utils/banned-page":102,"../utils/validators":109,"./button":51,"./form":58,react:"react","react-dom":"react-dom"}],72:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.PasswordChangedPage=n.ResetPasswordForm=void 0;var l=e("react"),c=r(l),d=e("react-dom"),f=r(d),p=e("../index"),m=r(p),h=e("./button"),v=r(h),g=e("./form"),b=r(g),y=e("./sign-in.js"),_=r(y),w=e("../services/ajax"),E=r(w),k=e("../services/auth"),O=r(k),x=e("../services/modal"),N=r(x),j=e("../services/snackbar"),P=r(j),C=e("../utils/validators"),S=a(C),M=e("../utils/banned-page"),T=r(M),L=n.ResetPasswordForm=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,password:"",validators:{password:[S.passwordMinLength(m["default"].get("SETTINGS"))]}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(this.state.password.trim().length?P["default"].error(this.state.errors.password[0]):P["default"].error(gettext("Enter new password.")),!1)}},{key:"send",value:function(){return E["default"].post(m["default"].get("CHANGE_PASSWORD_API"),{password:this.state.password})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){403===e.status&&e.ban?(0,T["default"])(e.ban):P["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-reset-password"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"form-group"},c["default"].createElement("div",{className:"control-input"},c["default"].createElement("input",{type:"password",className:"form-control",placeholder:gettext("Enter new password"),disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement(v["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Change password"))))}}]),t}(b["default"]),A=n.PasswordChangedPage=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getMessage",value:function(){return interpolate(gettext("%(username)s, your password has been changed successfully."),{username:this.props.user.username},!0)}},{key:"showSignIn",value:function(){N["default"].show(_["default"])}},{key:"render",value:function(){return c["default"].createElement("div",{className:"page page-message page-message-success page-forgotten-password-changed"},c["default"].createElement("div",{className:"container"},c["default"].createElement("div",{className:"message-panel"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"check")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},this.getMessage()),c["default"].createElement("p",null,gettext("You will have to sign in using new password before continuing.")),c["default"].createElement("p",null,c["default"].createElement("button",{type:"button",className:"btn btn-primary",onClick:this.showSignIn},gettext("Sign in")))))))}}]),t}(c["default"].Component),R=function(e){function t(){var e,n,a,r;s(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.complete=function(e){O["default"].softSignOut(),$('#hidden-login-form input[name="redirect_to"]').remove(),f["default"].render(c["default"].createElement(A,{user:e}),document.getElementById("page-mount"))},r=n,o(a,r)}return i(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement(L,{callback:this.complete})}}]),t}(c["default"].Component);n["default"]=R},{"../index":85,"../services/ajax":91,"../services/auth":92,"../services/modal":97,"../services/snackbar":99,"../utils/banned-page":102,"../utils/validators":109,"./button":51,"./form":58,"./sign-in.js":74,react:"react","react-dom":"react-dom"}],73:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){var e,n,a,o;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=s(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.change=function(e){return function(){a.props.onChange({target:{value:e}})}},o=n,s(a,o)}return o(t,e),i(t,[{key:"getChoice",value:function(){var e=this,t=null;return this.props.choices.map(function(n){n.value===e.props.value&&(t=n)}),t}},{key:"getIcon",value:function(){return this.getChoice().icon}},{key:"getLabel",value:function(){return this.getChoice().label}},{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"btn-group btn-select-group"},l["default"].createElement("button",{type:"button",className:"btn btn-select dropdown-toggle",id:this.props.id||null,"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},l["default"].createElement("span",{className:"material-icon"},this.getIcon()),this.getLabel()),l["default"].createElement("ul",{className:"dropdown-menu"},this.props.choices.map(function(t,n){return l["default"].createElement("li",{key:n},l["default"].createElement("button",{type:"button",className:"btn-link",onClick:e.change(t.value)},l["default"].createElement("span",{className:"material-icon"},t.icon),t.label))})))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],74:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../index"),d=a(c),f=e("./button"),p=a(f),m=e("./form"),h=a(m),v=e("../services/ajax"),g=a(v),b=e("../services/modal"),y=a(b),_=e("../services/snackbar"),w=a(_),E=e("../utils/banned-page"),k=a(E),O=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,showActivation:!1,username:"",password:"",validators:{username:[],password:[]}},n}return o(t,e),i(t,[{key:"clean",value:function(){return this.isValid()?!0:(w["default"].error(gettext("Fill out both fields.")),!1)}},{key:"send",value:function(){return g["default"].post(d["default"].get("AUTH_API"),{username:this.state.username,password:this.state.password})}},{key:"handleSuccess",value:function(){var e=$("#hidden-login-form");e.append('<input type="text" name="username" />'),e.append('<input type="password" name="password" />'),e.find('input[type="hidden"]').val(g["default"].getCsrfToken()),e.find('input[name="redirect_to"]').val(window.location.pathname),e.find('input[name="username"]').val(this.state.username),e.find('input[name="password"]').val(this.state.password),e.submit(),this.setState({isLoading:!0})}},{key:"handleError",value:function(e){400===e.status?"inactive_admin"===e.code?w["default"].info(e.detail):"inactive_user"===e.code?(w["default"].info(e.detail),this.setState({showActivation:!0})):"banned"===e.code?((0,k["default"])(e.detail),y["default"].hide()):w["default"].error(e.detail):403===e.status&&e.ban?((0,k["default"])(e.ban),y["default"].hide()):w["default"].apiError(e)}},{key:"getActivationButton",value:function(){return this.state.showActivation?l["default"].createElement("a",{href:d["default"].get("REQUEST_ACTIVATION_URL"),className:"btn btn-success btn-block"},gettext("Activate account")):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-dialog modal-sm modal-sign-in",role:"document"},l["default"].createElement("div",{className:"modal-content"},l["default"].createElement("div",{className:"modal-header"},l["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},l["default"].createElement("span",{"aria-hidden":"true"},"×")),l["default"].createElement("h4",{className:"modal-title"},gettext("Sign in"))),l["default"].createElement("form",{onSubmit:this.handleSubmit},l["default"].createElement("div",{className:"modal-body"},l["default"].createElement("div",{className:"form-group"},l["default"].createElement("div",{className:"control-input"},l["default"].createElement("input",{id:"id_username",className:"form-control",type:"text",disabled:this.state.isLoading,placeholder:gettext("Username or e-mail"),onChange:this.bindInput("username"),value:this.state.username}))),l["default"].createElement("div",{className:"form-group"},l["default"].createElement("div",{className:"control-input"},l["default"].createElement("input",{id:"id_password",className:"form-control",type:"password",disabled:this.state.isLoading,placeholder:gettext("Password"),onChange:this.bindInput("password"),value:this.state.password})))),l["default"].createElement("div",{className:"modal-footer"},this.getActivationButton(),l["default"].createElement(p["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Sign in")),l["default"].createElement("a",{href:d["default"].get("FORGOTTEN_PASSWORD_URL"),className:"btn btn-default btn-block"},gettext("Forgot password?"))))))}}]),t}(h["default"]);n["default"]=O},{"../index":85,"../services/ajax":91,"../services/modal":97,"../services/snackbar":99,"../utils/banned-page":102,"./button":51,"./form":58,react:"react"}],75:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return e.snackbar}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Snackbar=void 0,n.select=i;var l=e("react"),c=a(l),d={info:"alert-info",success:"alert-success",warning:"alert-warning",error:"alert-danger"};n.Snackbar=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),u(t,[{key:"getSnackbarClass",value:function(){var e="alerts-snackbar";return e+=this.props.isVisible?" in":" out"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getSnackbarClass()},c["default"].createElement("p",{className:"alert "+d[this.props.type]},this.props.message))}}]),t}(c["default"].Component)},{react:"react"}],76:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactGuestNav=n.GuestNav=n.GuestMenu=void 0;var u=e("react"),l=a(u),c=e("../avatar"),d=a(c),f=e("../register-button"),p=a(f),m=e("../sign-in.js"),h=a(m),v=e("../../services/mobile-navbar-dropdown"),g=a(v),b=e("../../services/modal"),y=a(b),_=n.GuestMenu=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"showSignInModal",value:function(){y["default"].show(h["default"])}},{key:"render",value:function(){return l["default"].createElement("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},l["default"].createElement("li",{className:"guest-preview"},l["default"].createElement("h4",null,gettext("You are browsing as guest.")),l["default"].createElement("p",null,gettext("Sign in or register to start and participate in discussions.")),l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-xs-6"},l["default"].createElement("button",{type:"button",className:"btn btn-default btn-block",onClick:this.showSignInModal},gettext("Sign in"))),l["default"].createElement("div",{className:"col-xs-6"},l["default"].createElement(p["default"],{className:"btn-primary btn-block"},gettext("Register"))))))}}]),t}(l["default"].Component);n.GuestNav=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"nav nav-guest"},l["default"].createElement("button",{type:"button",className:"btn navbar-btn btn-default",onClick:this.showSignInModal},gettext("Sign in")),l["default"].createElement(p["default"],{className:"navbar-btn btn-primary"},gettext("Register")))}}]),t}(_),n.CompactGuestNav=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"showGuestMenu",value:function(){g["default"].show(_)}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",onClick:this.showGuestMenu},l["default"].createElement(d["default"],{size:"64"}))}}]),t}(l["default"].Component)},{"../../services/mobile-navbar-dropdown":96,"../../services/modal":97,"../avatar":49,"../register-button":68,"../sign-in.js":74,react:"react"}],77:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return e.auth}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactUserMenu=n.UserMenu=void 0,n.select=i;var l=e("react"),c=a(l),d=e("./guest-nav"),f=e("./user-nav");n.UserMenu=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),u(t,[{key:"render",value:function(){return this.props.isAuthenticated?c["default"].createElement(f.UserNav,{user:this.props.user}):c["default"].createElement(d.GuestNav,null)}}]),t}(c["default"].Component),n.CompactUserMenu=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),u(t,[{key:"render",value:function(){return this.props.isAuthenticated?c["default"].createElement(f.CompactUserNav,{user:this.props.user}):c["default"].createElement(d.CompactGuestNav,null)}}]),t}(c["default"].Component)},{"./guest-nav":76,"./user-nav":78,react:"react"}],78:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{user:e.auth.user}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactUserNav=n.UserNav=n.UserMenu=void 0,n.selectUserMenu=i;var l=e("react"),c=a(l),d=e("react-redux"),f=e("../avatar"),p=a(f),m=e("../change-avatar/root"),h=a(m),v=e("../../index"),g=a(v),b=e("../../services/mobile-navbar-dropdown"),y=a(b),_=e("../../services/modal"),w=a(_),E=n.UserMenu=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),u(t,[{key:"logout",value:function(){var e=confirm(gettext("Are you sure you want to sign out?"));e&&$("#hidden-logout-form").submit()}},{key:"changeAvatar",value:function(){w["default"].show((0,d.connect)(m.select)(h["default"]))}},{key:"render",value:function(){return c["default"].createElement("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},c["default"].createElement("li",{className:"dropdown-header"},c["default"].createElement("strong",null,this.props.user.username)),c["default"].createElement("li",{className:"divider"}),c["default"].createElement("li",null,c["default"].createElement("a",{href:this.props.user.absolute_url},c["default"].createElement("span",{className:"material-icon"},"account_circle"),gettext("See your profile"))),c["default"].createElement("li",null,c["default"].createElement("a",{href:g["default"].get("USERCP_URL")},c["default"].createElement("span",{className:"material-icon"},"done_all"),gettext("Change options"))),c["default"].createElement("li",null,c["default"].createElement("button",{type:"button",className:"btn-link",onClick:this.changeAvatar},c["default"].createElement("span",{className:"material-icon"},"portrait"),gettext("Change avatar"))),c["default"].createElement("li",{className:"divider"}),c["default"].createElement("li",{className:"dropdown-footer"},c["default"].createElement("button",{type:"button",className:"btn btn-default btn-block",onClick:this.logout},gettext("Log out"))))}}]),t}(c["default"].Component);n.UserNav=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement("ul",{className:"ul nav navbar-nav nav-user"},c["default"].createElement("li",{className:"dropdown"},c["default"].createElement("a",{href:this.props.user.absolute_url,className:"dropdown-toggle","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",role:"button"},c["default"].createElement(p["default"],{user:this.props.user,size:"64"})),c["default"].createElement(E,{user:this.props.user})))}}]),t}(c["default"].Component),n.CompactUserNav=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),u(t,[{key:"showUserMenu",value:function(){y["default"].showConnected("user-menu",(0,d.connect)(i)(E))}},{key:"render",value:function(){return c["default"].createElement("button",{type:"button",onClick:this.showUserMenu},c["default"].createElement(p["default"],{user:this.props.user,size:"64"}))}}]),t}(c["default"].Component)},{"../../index":85,"../../services/mobile-navbar-dropdown":96,"../../services/modal":97,"../avatar":49,"../change-avatar/root":55,react:"react","react-redux":"react-redux"}],79:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.StatusLabel=n.StatusIcon=void 0;var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"getClass",value:function(){var e="";return this.props.status.is_banned?e="banned":this.props.status.is_hidden?e="offline":this.props.status.is_online_hidden?e="online":this.props.status.is_offline_hidden?e="offline":this.props.status.is_online?e="online":this.props.status.is_offline&&(e="offline"),"user-status user-"+e}},{key:"render",value:function(){return l["default"].createElement("span",{className:this.getClass()},this.props.children)}}]),t}(l["default"].Component);n["default"]=c;n.StatusIcon=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"getIcon",value:function(){return this.props.status.is_banned?"remove_circle_outline":this.props.status.is_hidden?"help_outline":this.props.status.is_online_hidden?"label":this.props.status.is_offline_hidden?"label_outline":this.props.status.is_online?"lens":this.props.status.is_offline?"panorama_fish_eye":void 0}},{key:"render",value:function(){return l["default"].createElement("span",{className:"material-icon status-icon"},this.getIcon())}}]),t}(l["default"].Component),n.StatusLabel=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"getHelp",value:function(){return this.props.status.is_banned?this.props.status.banned_until?interpolate(gettext("%(username)s is hiding banned until %(ban_expires)s"),{username:this.props.user.username,ban_expires:this.props.status.banned_until.format("LL, LT")},!0):interpolate(gettext("%(username)s is hiding banned"),{username:this.props.user.username},!0):this.props.status.is_hidden?interpolate(gettext("%(username)s is hiding activity"),{username:this.props.user.username},!0):this.props.status.is_online_hidden?interpolate(gettext("%(username)s is online (hidden)"),{username:this.props.user.username},!0):this.props.status.is_offline_hidden?interpolate(gettext("%(username)s was last seen %(last_click)s (hidden)"),{username:this.props.user.username,last_click:this.props.status.last_click.fromNow()},!0):this.props.status.is_online?interpolate(gettext("%(username)s is online"),{username:this.props.user.username},!0):this.props.status.is_offline?interpolate(gettext("%(username)s was last seen %(last_click)s"),{username:this.props.user.username,last_click:this.props.status.last_click.fromNow()},!0):void 0}},{key:"getLabel",value:function(){return this.props.status.is_banned?gettext("Banned"):this.props.status.is_hidden?gettext("Hiding activity"):this.props.status.is_online_hidden?gettext("Online (hidden)"):this.props.status.is_offline_hidden?gettext("Offline (hidden)"):this.props.status.is_online?gettext("Online"):this.props.status.is_offline?gettext("Offline"):void 0}},{key:"render",value:function(){return l["default"].createElement("span",{className:this.props.className||"status-label",title:this.getHelp()},this.getLabel())}}]),t}(l["default"].Component)},{react:"react"}],80:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.NoActivePosters=n.ActivePostersLoading=n.ActivePosters=n.ActivePoster=void 0;var l=e("react"),c=r(l),d=e("react-router"),f=e("../avatar"),p=r(f),m=e("../user-status"),h=r(m),v=e("../../index"),g=r(v),b=e("../../reducers/users"),y=e("../../services/ajax"),_=r(y),w=e("../../services/page-title"),E=r(w),k=e("../../services/store"),O=r(k),x=e("../../utils/random"),N=a(x),j=n.ActivePoster=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getClassName",value:function(){return this.props.rank.css_class?"list-group-item list-group-rank-"+this.props.rank.css_class:"list-group-item"}},{key:"getUserStatus",value:function(){return this.props.user.status?c["default"].createElement(h["default"],{user:this.props.user,status:this.props.user.status},c["default"].createElement(m.StatusIcon,{user:this.props.user,status:this.props.user.status}),c["default"].createElement(m.StatusLabel,{user:this.props.user,status:this.props.user.status,className:"status-label hidden-xs hidden-sm"})):c["default"].createElement("span",{className:"user-status"},c["default"].createElement("span",{className:"status-icon ui-preview"}," "),c["default"].createElement("span",{className:"status-label ui-preview hidden-xs hidden-sm"}," "))}},{key:"getRankName",value:function(){if(this.props.rank.is_tab){var e=g["default"].get("USERS_LIST_URL")+this.props.rank.slug+"/";return c["default"].createElement(d.Link,{to:e,className:"rank-name"},this.props.rank.name)}return c["default"].createElement("span",{className:"rank-name"},this.props.rank.name)}},{key:"getUserTitle",value:function(){return this.props.user.title?c["default"].createElement("span",{className:"user-title hidden-xs hidden-sm"},this.props.user.title):null}},{key:"render",value:function(){return c["default"].createElement("li",{className:this.getClassName()},c["default"].createElement("div",{className:"rank-user-avatar"},c["default"].createElement("a",{href:this.props.user.absolute_url},c["default"].createElement(p["default"],{user:this.props.user,size:"50"}))),c["default"].createElement("div",{className:"rank-user"},c["default"].createElement("div",{className:"user-name"},c["default"].createElement("a",{href:this.props.user.absolute_url,className:"item-title"},this.props.user.username)),this.getUserStatus(),this.getRankName(),this.getUserTitle()),c["default"].createElement("div",{className:"rank-position"},c["default"].createElement("div",{className:"stat-value"},"#",this.props.counter),c["default"].createElement("div",{className:"text-muted"},gettext("Rank"))),c["default"].createElement("div",{className:"rank-posts-counted"},c["default"].createElement("div",{
+className:"stat-value"},this.props.user.meta.score),c["default"].createElement("div",{className:"text-muted"},gettext("Ranked posts"))),c["default"].createElement("div",{className:"rank-posts-total"},c["default"].createElement("div",{className:"stat-value"},this.props.user.posts),c["default"].createElement("div",{className:"text-muted"},gettext("Total posts"))))}}]),t}(c["default"].Component),P=n.ActivePosters=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getLeadMessage",value:function(){var e=ngettext("%(posters)s most active poster from last %(days)s days.","%(posters)s most active posters from last %(days)s days.",this.props.count);return interpolate(e,{posters:this.props.count,days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"active-posters-list"},c["default"].createElement("div",{className:"container"},c["default"].createElement("p",{className:"lead"},this.getLeadMessage()),c["default"].createElement("div",{className:"active-posters ui-ready"},c["default"].createElement("ul",{className:"list-group"},this.props.users.map(function(e,t){return c["default"].createElement(j,{user:e,rank:e.rank,counter:t+1,key:e.id})})))))}}]),t}(c["default"].Component),C=n.ActivePostersLoading=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement("div",{className:"active-posters-list"},c["default"].createElement("div",{className:"container"},c["default"].createElement("p",{className:"lead ui-preview-paragraph"},N.range(3,4).map(function(e){return c["default"].createElement("span",{key:e,className:"ui-preview-text",style:{width:N["int"](50,120)+"px"}}," ")})),c["default"].createElement("div",{className:"active-posters ui-preview"},c["default"].createElement("ul",{className:"list-group"},N.range(5,10).map(function(e,t){return c["default"].createElement("li",{key:e,className:"list-group-item"},c["default"].createElement("div",{className:"rank-user-avatar"},c["default"].createElement("span",null,c["default"].createElement(p["default"],{size:"50"}))),c["default"].createElement("div",{className:"rank-user"},c["default"].createElement("div",{className:"user-name"},c["default"].createElement("span",{className:"item-title"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:N["int"](30,80)+"px"}}," "))),c["default"].createElement("span",{className:"user-status"},c["default"].createElement("span",{className:"status-icon ui-preview"}," "),c["default"].createElement("span",{className:"status-label ui-preview hidden-xs hidden-sm"}," ")),c["default"].createElement("span",{className:"rank-name"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:N["int"](30,50)+"px"}}," ")),c["default"].createElement("span",{className:"user-title hidden-xs hidden-sm"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:N["int"](30,50)+"px"}}," "))),c["default"].createElement("div",{className:"rank-position"},c["default"].createElement("div",{className:"stat-value"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:"30px"}}," ")),c["default"].createElement("div",{className:"text-muted"},gettext("Rank"))),c["default"].createElement("div",{className:"rank-posts-counted"},c["default"].createElement("div",{className:"stat-value"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:"30px"}}," ")),c["default"].createElement("div",{className:"text-muted"},gettext("Ranked posts"))),c["default"].createElement("div",{className:"rank-posts-total"},c["default"].createElement("div",{className:"stat-value"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:"30px"}}," ")),c["default"].createElement("div",{className:"text-muted"},gettext("Total posts"))))})))))}}]),t}(c["default"].Component),S=n.NoActivePosters=function(e){function t(){return s(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getEmptyMessage",value:function(){return interpolate(gettext("No users have posted any new messages during last %(days)s days."),{days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"active-posters-list"},c["default"].createElement("div",{className:"container"},c["default"].createElement("p",{className:"lead"},this.getEmptyMessage())))}}]),t}(c["default"].Component),M=function(e){function t(e){s(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return g["default"].has("USERS")?n.initWithPreloadedData(g["default"].pop("USERS")):n.initWithoutPreloadedData(),n.poolId=null,n.startPooling(),n}return i(t,e),u(t,[{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,trackedPeriod:e.tracked_period,count:e.count},O["default"].dispatch((0,b.dehydrate)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPooling",value:function(){var e=this,t=function n(){_["default"].get(g["default"].get("USERS_API"),{list:"active"}).then(function(t){e.setState({isLoaded:!0,trackedPeriod:t.tracked_period,count:t.count}),O["default"].dispatch((0,b.dehydrate)(t.results)),e.poolId=window.setTimeout(n,9e4)})};t()}},{key:"componentDidMount",value:function(){E["default"].set({title:this.props.route.extra.name,parent:gettext("Users")})}},{key:"componentWillUnmount",value:function(){this.poolId&&window.clearTimeout(this.poolId)}},{key:"render",value:function(){return this.state.isLoaded?this.state.count>0?c["default"].createElement(P,{users:this.props.users,trackedPeriod:this.state.trackedPeriod,count:this.state.count}):c["default"].createElement(S,{trackedPeriod:this.state.trackedPeriod}):c["default"].createElement(C,null)}}]),t}(c["default"].Component);n["default"]=M},{"../../index":85,"../../reducers/users":90,"../../services/ajax":91,"../../services/page-title":98,"../../services/store":100,"../../utils/random":107,"../avatar":49,"../user-status":79,react:"react","react-router":"react-router"}],81:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactNav=n.TabsNav=void 0;var u=e("react"),l=a(u),c=e("react-router"),d=e("../li"),f=a(d),p=e("../../index"),m=(a(p),function(e,t){var n=e;return n+="rank"===t.component?t.slug:t.component,n+"/"}),h=function(e,t){return t.map(function(t){var n=m(e,t);return l["default"].createElement(f["default"],{path:n,key:n},l["default"].createElement(c.Link,{to:n},t.name))})};n.TabsNav=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("ul",{className:"nav nav-pills"},h(this.props.baseUrl,this.props.lists))}}]),t}(l["default"].Component),n.CompactNav=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("ul",{className:"dropdown-menu",role:"menu"},h(this.props.baseUrl,this.props.lists))}}]),t}(l["default"].Component)},{"../../index":85,"../li":59,react:"react","react-router":"react-router"}],82:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../../services/page-title"),d=a(c),f=function(e){function t(){return r(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"componentDidMount",value:function(){d["default"].set({title:this.props.route.rank.name,parent:gettext("Users")})}},{key:"render",value:function(){return l["default"].createElement("div",null,l["default"].createElement("div",{className:"container"},"Hello, this is users with rank list!"))}}]),t}(l["default"].Component);n["default"]=f},{"../../services/page-title":98,react:"react"}],83:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{tick:e.tick.tick,user:e.auth.user,users:e.users}}function u(){var e=[];return y["default"].get("USERS_LISTS").forEach(function(t){"rank"===t.component?e.push({path:y["default"].get("USERS_LIST_URL")+t.slug+"/",component:(0,f.connect)(i)(g["default"]),rank:{name:t.name,slug:t.slug,css_class:t.css_class,description:t.description}}):"active-posters"===t.component&&e.push({path:y["default"].get("USERS_LIST_URL")+t.component+"/",component:(0,f.connect)(i)(h["default"]),extra:{name:t.name}})}),e}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i,n.paths=u;var c=e("react"),d=a(c),f=e("react-redux"),p=e("./navs"),m=e("./active-posters"),h=a(m),v=e("./rank"),g=a(v),b=e("../../index"),y=a(b),_=function(e){function t(e){r(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.toggleNav=function(){n.state.dropdown?n.setState({dropdown:!1}):n.setState({dropdown:!0})},n.state={dropdown:!1},n}return o(t,e),l(t,[{key:"getToggleNavClassName",value:function(){return this.state.dropdown?"btn btn-default btn-icon open":"btn btn-default btn-icon"}},{key:"getCompactNavClassName",value:function(){return this.state.dropdown?"compact-nav open":"compact-nav"}},{key:"render",value:function(){return d["default"].createElement("div",{className:"page page-users-lists"},d["default"].createElement("div",{className:"page-header tabbed"},d["default"].createElement("div",{className:"container"},d["default"].createElement("h1",{className:"pull-left"},gettext("Users")),d["default"].createElement("button",{className:"btn btn-default btn-icon btn-dropdown-toggle hidden-md hidden-lg",type:"button",onClick:this.toggleNav,"aria-haspopup":"true","aria-expanded":this.state.dropdown?"true":"false"},d["default"].createElement("i",{className:"material-icon"},"menu"))),d["default"].createElement("div",{className:"page-tabs hidden-xs hidden-sm"},d["default"].createElement("div",{className:"container"},d["default"].createElement(p.TabsNav,{lists:y["default"].get("USERS_LISTS"),baseUrl:y["default"].get("USERS_LIST_URL")})))),d["default"].createElement("div",{className:this.getCompactNavClassName()},d["default"].createElement(p.CompactNav,{lists:y["default"].get("USERS_LISTS"),baseUrl:y["default"].get("USERS_LIST_URL")})),this.props.children)}}]),t}(d["default"].Component);n["default"]=_},{"../../index":85,"./active-posters":80,"./navs":81,"./rank":82,react:"react","react-redux":"react-redux"}],84:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){var e,n,a,o;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=s(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.toggle=function(){a.props.onChange({target:{value:!a.props.value}})},o=n,s(a,o)}return o(t,e),i(t,[{key:"getClassName",value:function(){return this.props.value?"btn btn-yes-no btn-yes-no-on":"btn btn-yes-no btn-yes-no-off"}},{key:"getIcon",value:function(){return this.props.value?this.props.iconOn||"check_box":this.props.iconOff||"check_box_outline_blank"}},{key:"getLabel",value:function(){return this.props.value?this.props.labelOn||gettext("yes"):this.props.labelOff||gettext("no")}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",onClick:this.toggle,className:this.getClassName(),id:this.props.id||null,"aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},l["default"].createElement("span",{className:"material-icon"},this.getIcon()),this.getLabel())}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],85:[function(e,t,n){(function(t){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Misago=void 0;var o=e("./utils/ordered-list"),i=a(o),u=n.Misago=function(){function e(){r(this,e),this._initializers=[],this._context={}}return s(e,[{key:"addInitializer",value:function(e){this._initializers.push({key:e.name,item:e.initializer,after:e.after,before:e.before})}},{key:"init",value:function(e){var t=this;this._context=e;var n=new i["default"](this._initializers).orderedValues();n.forEach(function(e){e(t)})}},{key:"has",value:function(e){return!!this._context[e]}},{key:"get",value:function(e,t){return this.has(e)?this._context[e]:t||void 0}},{key:"pop",value:function(e){if(this.has(e)){var t=this._context[e];return this._context[e]=null,t}}}]),e}(),l=new u;t.misago=l,n["default"]=l}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./utils/ordered-list":106}],86:[function(e,t,n){"use strict";function a(e){return{type:l,patch:e}}function r(e){return{type:c,user:e}}function s(){var e=arguments.length<=0||void 0===arguments[0]?!1:arguments[0];return{type:d,soft:e}}function o(){var e=arguments.length<=0||void 0===arguments[0]?u:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case l:var n=Object.assign({},e);return n.user=Object.assign({},e.user,t.patch),n;case c:return Object.assign({},e,{signedIn:t.user});case d:return Object.assign({},e,{isAuthenticated:!1,isAnonymous:!0,signedOut:!t.soft});case i.UPDATE_AVATAR:if(e.isAuthenticated&&e.user.id===t.userId){var a=Object.assign({},e);return a.user=Object.assign({},e.user,{avatar_hash:t.avatarHash}),a}return e;case i.UPDATE_USERNAME:if(e.isAuthenticated&&e.user.id===t.userId){var r=Object.assign({},e);return r.user=Object.assign({},e.user,{username:t.username,slug:t.slug}),r}return e;default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.SIGN_OUT=n.SIGN_IN=n.PATCH_USER=n.initialState=void 0,n.patchUser=a,n.signIn=r,n.signOut=s,n["default"]=o;var i=e("./users"),u=n.initialState={signedIn:!1,signedOut:!1},l=n.PATCH_USER="PATCH_USER",c=n.SIGN_IN="SIGN_IN",d=n.SIGN_OUT="SIGN_OUT"},{"./users":90}],87:[function(e,t,n){"use strict";function a(e,t){return{type:i,message:e,messageType:t}}function r(){return{type:u}}function s(){var e=arguments.length<=0||void 0===arguments[0]?o:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];return t.type===i?{type:t.messageType,message:t.message,isVisible:!0}:t.type===u?Object.assign({},e,{isVisible:!1}):e}Object.defineProperty(n,"__esModule",{value:!0}),n.showSnackbar=a,n.hideSnackbar=r,n["default"]=s;var o=n.initialState={type:"info",message:"",isVisible:!1},i=n.SHOW_SNACKBAR="SHOW_SNACKBAR",u=n.HIDE_SNACKBAR="HIDE_SNACKBAR"},{}],88:[function(e,t,n){"use strict";function a(){return{type:o}}function r(){var e=arguments.length<=0||void 0===arguments[0]?s:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];return t.type===o?Object.assign({},e,{tick:e.tick+1}):e}Object.defineProperty(n,"__esModule",{value:!0}),n.doTick=a,n["default"]=r;var s=n.initialState={tick:0},o=n.TICK="TICK"},{}],89:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){return{type:c,change:e,user:t,changedBy:n}}function s(e){return{type:d,items:e}}function o(){var e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case c:var n=e.slice();return n.unshift({id:Math.floor(Date.now()/1e3),changed_by:t.changedBy,changed_by_username:t.changedBy.username,changed_on:(0,l["default"])(),new_username:t.change.username,old_username:t.user.username}),n;case d:return t.items.map(function(e){return Object.assign({},e,{changed_on:(0,l["default"])(e.changed_on)})});case i.UPDATE_AVATAR:return e.map(function(e){return e=Object.assign({},e),e.changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{avatar_hash:t.avatarHash})),Object.assign({},e)});case i.UPDATE_USERNAME:return e.map(function(e){return e=Object.assign({},e),e.changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{username:t.username,slug:t.slug})),Object.assign({},e)});default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.DEHYDRATE_RESULT=n.ADD_NAME_CHANGE=void 0,n.addNameChange=r,n.dehydrate=s,n["default"]=o;var i=e("./users"),u=e("moment"),l=a(u),c=n.ADD_NAME_CHANGE="ADD_NAME_CHANGE",d=n.DEHYDRATE_RESULT="DEHYDRATE_RESULT"},{"./users":90,moment:"moment"}],90:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return{type:c,items:e}}function s(e,t){return{type:d,userId:e.id,avatarHash:t}}function o(e,t,n){return{type:f,userId:e.id,username:t,slug:n}}function i(){var e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case c:return t.items.map(function(e){var t=e.status||null;return t&&(t=Object.assign({},t,{last_click:t.last_click?(0,l["default"])(t.last_click):null,banned_until:t.banned_until?(0,l["default"])(t.banned_until):null})),Object.assign({},e,{status:t})});default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.UPDATE_USERNAME=n.UPDATE_AVATAR=n.DEHYDRATE_RESULT=void 0,n.dehydrate=r,n.updateAvatar=s,n.updateUsername=o,n["default"]=i;var u=e("moment"),l=a(u),c=n.DEHYDRATE_RESULT="DEHYDRATE_RESULT",d=n.UPDATE_AVATAR="UPDATE_AVATAR",f=n.UPDATE_USERNAME="UPDATE_USERNAME"},{moment:"moment"}],91:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var s=n.Ajax=function(){function e(){a(this,e),this._cookieName=null,this._csrfToken=null}return r(e,[{key:"init",value:function(e){this._cookieName=e,this._csrfToken=this.getCsrfToken()}},{key:"getCsrfToken",value:function(){if(-1!==document.cookie.indexOf(this._cookieName)){var e=new RegExp(this._cookieName+"=([^;]*)"),t=document.cookie.match(e)[0];return t?t.split("=")[1]:null}return null}},{key:"request",value:function(e,t,n){var a=this;return new Promise(function(r,s){var o={url:t,method:e,headers:{"X-CSRFToken":a._csrfToken},data:n?JSON.stringify(n):null,contentType:"application/json; charset=utf-8",dataType:"json",success:function(e){r(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),t.statusText=e.statusText,s(t)}};$.ajax(o)})}},{key:"get",value:function(e,t){return t&&(e+="?"+$.param(t)),this.request("GET",e)}},{key:"post",value:function(e,t){return this.request("POST",e,t)}},{key:"patch",value:function(e,t){return this.request("PATCH",e,t)}},{key:"put",value:function(e,t){return this.request("PUT",e,t)}},{key:"delete",value:function(e){return this.request("DELETE",e)}},{key:"upload",value:function(e,t,n){var a=this;return new Promise(function(r,s){var o={url:e,method:"POST",headers:{"X-CSRFToken":a._csrfToken},data:t,contentType:!1,processData:!1,xhr:function i(){var i=new window.XMLHttpRequest;return i.upload.addEventListener("progress",function(e){e.lengthComputable&&n(Math.round(e.loaded/e.total*100))},!1),i},success:function(e){r(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),t.statusText=e.statusText,s(t)}};$.ajax(o)})}}]),e}();n["default"]=new s},{}],92:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Auth=void 0;var s=e("../reducers/auth"),o=n.Auth=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e,t,n){this._store=e,this._local=t,this._modal=n,this.syncSession(),this.watchState()}},{key:"syncSession",value:function(){var e=this._store.getState().auth;e.isAuthenticated?this._local.set("auth",{isAuthenticated:!0,username:e.user.username}):this._local.set("auth",{isAuthenticated:!1})}},{key:"watchState",value:function(){var e=this;this._local.watch("auth",function(t){t.isAuthenticated?e._store.dispatch((0,s.signIn)({username:t.username})):e._store.dispatch((0,s.signOut)())}),this._modal.hide()}},{key:"signIn",value:function(e){this._store.dispatch((0,s.signIn)(e)),this._local.set("auth",{isAuthenticated:!0,username:e.username}),this._modal.hide()}},{key:"signOut",value:function(){this._store.dispatch((0,s.signOut)()),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}},{key:"softSignOut",value:function(){this._store.dispatch((0,s.signOut)(!0)),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}}]),e}();n["default"]=new o},{"../reducers/auth":86}],93:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Captcha=n.ReCaptcha=n.ReCaptchaComponent=n.QACaptcha=n.NoCaptcha=n.BaseCaptcha=void 0;var u=e("react"),l=a(u),c=e("../components/form-group"),d=a(c),f=n.BaseCaptcha=function(){function e(){o(this,e)}return i(e,[{key:"init",value:function(e,t,n,a){this._context=e,this._ajax=t,this._include=n,this._snackbar=a}}]),e}(),p=n.NoCaptcha=function(e){function t(){return o(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"load",value:function(){return new Promise(function(e){e()})}},{key:"validator",value:function(){return null}},{key:"component",value:function(){return null}}]),t}(f),m=n.QACaptcha=function(e){function t(){return o(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"load",value:function(){var e=this;return new Promise(function(t,n){e._ajax.get(e._context.get("CAPTCHA_API_URL")).then(function(n){e.question=n.question,e.helpText=n.help_text,t()},function(){e._snackbar.error(gettext("Failed to load CAPTCHA.")),n()})})}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return l["default"].createElement(d["default"],{label:this.question,"for":"id_captcha",labelClass:e.labelClass||"col-sm-4",controlClass:e.controlClass||"col-sm-8",validation:e.form.state.errors.captcha,helpText:this.helpText||null},l["default"].createElement("input",{type:"text",id:"id_captcha",className:"form-control","aria-describedby":"id_captcha_status",disabled:e.form.state.isLoading,onChange:e.form.bindInput("captcha"),value:e.form.state.captcha}))}}]),t}(f),h=n.ReCaptchaComponent=function(e){function t(){return o(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"componentDidMount",value:function(){var e=this;grecaptcha.render("recaptcha",{sitekey:this.props.siteKey,callback:function(t){e.props.binding({target:{value:t}})}})}},{key:"render",value:function(){return l["default"].createElement("div",{id:"recaptcha"})}}]),t}(l["default"].Component),v=n.ReCaptcha=function(e){function t(){return o(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"load",value:function(){return this._include.include("https://www.google.com/recaptcha/api.js",!0),new Promise(function(e){var t=function n(){"undefined"==typeof grecaptcha?window.setTimeout(function(){n()},200):e()};t()})}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return l["default"].createElement(d["default"],{label:gettext("Captcha"),"for":"id_captcha",labelClass:e.labelClass||"col-sm-4",controlClass:e.controlClass||"col-sm-8",validation:e.form.state.errors.captcha,helpText:gettext("Please solve the quick test.")},l["default"].createElement(h,{siteKey:this._context.get("SETTINGS").recaptcha_site_key,binding:e.form.bindInput("captcha")}))}}]),t}(f),g=n.Captcha=function(){function e(){o(this,e)}return i(e,[{key:"init",value:function(e,t,n,a){switch(e.get("SETTINGS").captcha_type){case"no":this._captcha=new p;break;case"qa":this._captcha=new m;break;case"re":this._captcha=new v}this._captcha.init(e,t,n,a)}},{key:"load",value:function(){return this._captcha.load()}},{key:"validator",value:function(){return this._captcha.validator()}},{key:"component",value:function(e){return this._captcha.component(e)}}]),e}();n["default"]=new g},{"../components/form-group":57,react:"react"}],94:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var s=n.Include=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._staticUrl=e,this._included=[]}},{key:"include",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?!1:arguments[1];-1===this._included.indexOf(e)&&(this._included.push(e),this._include(e,t))}},{key:"_include",value:function(e,t){$.ajax({url:(t?"":this._staticUrl)+e,cache:!0,dataType:"script"})}}]),e}();n["default"]=new s},{}],95:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var s=window.localStorage,o=n.LocalStorage=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){var t=this;this._prefix=e,this._watchers=[],window.addEventListener("storage",function(e){var n=JSON.parse(e.newValue);t._watchers.forEach(function(t){t.key===e.key&&e.oldValue!==e.newValue&&t.callback(n)})})}},{key:"set",value:function(e,t){s.setItem(this._prefix+e,JSON.stringify(t))}},{key:"get",value:function(e){var t=s.getItem(this._prefix+e);return t?JSON.parse(t):null}},{key:"watch",value:function(e,t){this._watchers.push({key:this._prefix+e,callback:t})}}]),e}();n["default"]=new o},{}],96:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.MobileNavbarDropdown=void 0;var o=e("../utils/mount-component"),i=a(o),u=n.MobileNavbarDropdown=function(){function e(){r(this,e)}return s(e,[{key:"init",value:function(e){this._element=e,this._component=null}},{key:"show",value:function(e){this._component===e?this.hide():(this._component=e,(0,i["default"])(e,this._element.id),$(this._element).addClass("open"))}},{key:"showConnected",value:function(e,t){
+this._component===e?this.hide():(this._component=e,(0,i["default"])(t,this._element.id,!0),$(this._element).addClass("open"))}},{key:"hide",value:function(){$(this._element).removeClass("open"),this._component=null}}]),e}();n["default"]=new u},{"../utils/mount-component":105}],97:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var s=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Modal=void 0;var o=e("react-dom"),i=a(o),u=e("../utils/mount-component"),l=a(u),c=n.Modal=function(){function e(){r(this,e)}return s(e,[{key:"init",value:function(e){var t=this;this._element=e,this._modal=$(e).modal({show:!1}),this._modal.on("hidden.bs.modal",function(){i["default"].unmountComponentAtNode(t._element)})}},{key:"show",value:function(e){(0,l["default"])(e,this._element.id),this._modal.modal("show")}},{key:"hide",value:function(){this._modal.modal("hide")}}]),e}();n["default"]=new c},{"../utils/mount-component":105,"react-dom":"react-dom"}],98:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var s=n.PageTitle=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._forumName=e}},{key:"set",value:function(e){"string"==typeof e&&(e={title:e});var t=e.title;if(e.page){var n=interpolate(gettext("page %(page)s"),{page:e.page},!0);t+=" ("+n+")"}e.parent&&(t+=" | "+e.parent),document.title=t+" | "+this._forumName}}]),e}();n["default"]=new s},{}],99:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Snackbar=void 0;var s=e("../reducers/snackbar"),o=300,i=5e3,u=n.Snackbar=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._store=e,this._timeout=null}},{key:"alert",value:function(e,t){var n=this;this._timeout?(window.clearTimeout(this._timeout),this._store.dispatch((0,s.hideSnackbar)()),this._timeout=window.setTimeout(function(){n._timeout=null,n.alert(e,t)},o)):(this._store.dispatch((0,s.showSnackbar)(e,t)),this._timeout=window.setTimeout(function(){n._store.dispatch((0,s.hideSnackbar)()),n._timeout=null},i))}},{key:"info",value:function(e){this.alert(e,"info")}},{key:"success",value:function(e){this.alert(e,"success")}},{key:"warning",value:function(e){this.alert(e,"warning")}},{key:"error",value:function(e){this.alert(e,"error")}},{key:"apiError",value:function(e){var t=gettext("Unknown error has occured.");0===e.status&&(t=e.detail),400===e.status&&e.detail&&(t=e.detail),403===e.status&&(t=e.detail,"Permission denied"===t&&(t=gettext("You don't have permission to perform this action."))),404===e.status&&(t=gettext("Action link is invalid.")),this.error(t)}}]),e}();n["default"]=new u},{"../reducers/snackbar":87}],100:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.StoreWrapper=void 0;var s=e("redux"),o=n.StoreWrapper=function(){function e(){a(this,e),this._store=null,this._reducers={},this._initialState={}}return r(e,[{key:"addReducer",value:function(e,t,n){this._reducers[e]=t,this._initialState[e]=n}},{key:"init",value:function(){this._store=(0,s.createStore)((0,s.combineReducers)(this._reducers),this._initialState)}},{key:"getStore",value:function(){return this._store}},{key:"getState",value:function(){return this._store.getState()}},{key:"dispatch",value:function(e){return this._store.dispatch(e)}}]),e}();n["default"]=new o},{redux:"redux"}],101:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var s=n.Zxcvbn=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._include=e}},{key:"scorePassword",value:function(e,t){return zxcvbn(e,t).score}},{key:"load",value:function(){return"undefined"==typeof zxcvbn?(this._include.include("misago/js/zxcvbn.js"),this._loadingPromise()):this._loadedPromise()}},{key:"_loadingPromise",value:function(){return new Promise(function(e){var t=function n(){"undefined"==typeof zxcvbn?window.setTimeout(function(){n()},200):e()};t()})}},{key:"_loadedPromise",value:function(){return new Promise(function(e){e()})}}]),e}();n["default"]=new s},{}],102:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e,t){if(l["default"].render(i["default"].createElement(c.Provider,{store:v["default"].getStore()},i["default"].createElement(b,{message:e.message,expires:e.expires_on?(0,s["default"])(e.expires_on):null})),document.getElementById("page-mount")),"undefined"==typeof t||t){var n=m["default"].get("SETTINGS").forum_name;document.title=gettext("You are banned")+" | "+n,window.history.pushState({},"",m["default"].get("BANNED_URL"))}};var r=e("moment"),s=a(r),o=e("react"),i=a(o),u=e("react-dom"),l=a(u),c=e("react-redux"),d=e("../components/banned-page"),f=a(d),p=e("../index"),m=a(p),h=e("../services/store"),v=a(h),g=function(e){return e.tick},b=(0,c.connect)(g)(f["default"])},{"../components/banned-page":50,"../index":85,"../services/store":100,moment:"moment",react:"react","react-dom":"react-dom","react-redux":"react-redux"}],103:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e,t){var n=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],a=[],r=[];if(e.forEach(function(e){r.push(e),r.length===t&&(a.push(r),r=[])}),n!==!1&&r.length>0&&r.length<t)for(var s=r.length;t>s;s++)r.push(n);return r.length&&a.push(r),a}},{}],104:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e){return e>1e9?Math.round(100*e/1e9)/100+" GB":e>1e6?Math.round(100*e/1e6)/100+" MB":e>1e3?Math.round(100*e/1e3)/100+" KB":Math.round(100*e)/100+" B"}},{}],105:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e,t){var n=arguments.length<=2||void 0===arguments[2]?!0:arguments[2],a=document.getElementById(t);a&&(n?i["default"].render(s["default"].createElement(u.Provider,{store:c["default"].getStore()},s["default"].createElement(e,null)),a):i["default"].render(s["default"].createElement(e,null),a))};var r=e("react"),s=a(r),o=e("react-dom"),i=a(o),u=e("react-redux"),l=e("../services/store"),c=a(l)},{"../services/store":100,react:"react","react-dom":"react-dom","react-redux":"react-redux"}],106:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(t){a(this,e),this.isOrdered=!1,this._items=t||[]}return r(e,[{key:"add",value:function(e,t,n){this._items.push({key:e,item:t,after:n?n.after||null:null,before:n?n.before||null:null})}},{key:"get",value:function(e,t){for(var n=0;n<this._items.length;n++)if(this._items[n].key===e)return this._items[n].item;return t}},{key:"has",value:function(e){return void 0!==this.get(e)}},{key:"values",value:function t(){for(var t=[],e=0;e<this._items.length;e++)t.push(this._items[e].item);return t}},{key:"order",value:function(e){return this.isOrdered||(this._items=this._order(this._items),this.isOrdered=!0),e||"undefined"==typeof e?this.values():this._items}},{key:"orderedValues",value:function(){return this.order(!0)}},{key:"_order",value:function(e){function t(e){var t=-1;-1===r.indexOf(e.key)&&(e.after?(t=r.indexOf(e.after),-1!==t&&(t+=1)):e.before&&(t=r.indexOf(e.before)),-1!==t&&(a.splice(t,0,e),r.splice(t,0,e.key)))}var n=[];e.forEach(function(e){n.push(e.key)});var a=[],r=[];e.forEach(function(e){e.after||e.before||(a.push(e),r.push(e.key))}),e.forEach(function(e){"_end"===e.before&&(a.push(e),r.push(e.key))});for(var s=200;s>0&&n.length!==r.length;)s-=1,e.forEach(t);return a}}]),e}();n["default"]=s},{}],107:[function(e,t,n){"use strict";function a(e,t){return Math.floor(Math.random()*(t-e+1))+e}function r(e,t){for(var n=new Array(a(e,t)),r=0;r<n.length;r++)n[r]=r;return n}Object.defineProperty(n,"__esModule",{value:!0}),n["int"]=a,n.range=r},{}],108:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e){var t={component:e.component,childRoutes:[{path:e.root,onEnter:function(t,n){n(null,e.paths[0].path)}}].concat(e.paths.map(function(e){return e}))};i["default"].render(s["default"].createElement(u.Provider,{store:p["default"].getStore()},s["default"].createElement(l.Router,{routes:t,history:h})),m)};var r=e("react"),s=a(r),o=e("react-dom"),i=a(o),u=e("react-redux"),l=e("react-router"),c=e("history/lib/createBrowserHistory"),d=a(c),f=e("../services/store"),p=a(f),m=document.getElementById("page-mount"),h=new d["default"]},{"../services/store":100,"history/lib/createBrowserHistory":38,react:"react","react-dom":"react-dom","react-redux":"react-redux","react-router":"react-router"}],109:[function(e,t,n){"use strict";function a(){return function(e){return 0===$.trim(e).length?gettext("This field is required."):void 0}}function r(e){return function(t){return d.test(t)?void 0:e||gettext("Enter a valid email address.")}}function s(e,t){return function(n){var a="",r=$.trim(n).length;return e>r?(a=t?t(e,r):ngettext("Ensure this value has at least %(limit_value)s character (it has %(show_value)s).","Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).",e),interpolate(a,{limit_value:e,show_value:r},!0)):void 0}}function o(e,t){return function(n){var a="",r=$.trim(n).length;return r>e?(a=t?t(e,r):ngettext("Ensure this value has at most %(limit_value)s character (it has %(show_value)s).","Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).",e),interpolate(a,{limit_value:e,show_value:r},!0)):void 0}}function i(e){var t=function(e){return ngettext("Username must be at least %(limit_value)s character long.","Username must be at least %(limit_value)s characters long.",e)};return this.minLength(e.username_length_min,t)}function u(e){var t=function(e){return ngettext("Username cannot be longer than %(limit_value)s character.","Username cannot be longer than %(limit_value)s characters.",e)};return this.maxLength(e.username_length_max,t)}function l(){return function(e){return f.test($.trim(e))?void 0:gettext("Username can only contain latin alphabet letters and digits.")}}function c(e){var t=function(e){return ngettext("Valid password must be at least %(limit_value)s character long.","Valid password must be at least %(limit_value)s characters long.",e)};return this.minLength(e.password_length_min,t)}Object.defineProperty(n,"__esModule",{value:!0}),n.required=a,n.email=r,n.minLength=s,n.maxLength=o,n.usernameMinLength=i,n.usernameMaxLength=u,n.usernameContent=l,n.passwordMinLength=c;var d=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,f=new RegExp("^[0-9a-z]+$","i")},{}]},{},[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]);
+//# sourceMappingURL=misago.js.map

+ 1 - 1
misago/static/misago/js/misago.js.map

@@ -1 +1 @@
-{"version":3,"sources":["misago.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length",1,"module","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","setTimeout","len","run","clearTimeout","Item","fun","array","this","noop","process","nextTick","args","Array","arguments","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask",2,"global","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","value","Misago","undefined","_orderedList","_orderedList2","_initializers","_context","initializer","item","after","before","context","_this","initOrder","orderedValues","forEach","hasOwnProperty","fallback","has","misago","self","window","../../../../documents/misago/frontend/src/utils/ordered-list",3,"_ajax2","init","_index2","get","_index","_ajax","addInitializer","../../../../../documents/misago/frontend/src/index","../../../../../documents/misago/frontend/src/services/ajax",4,"_mountComponent2","_reactRedux","connect","_authMessage","select","_authMessage2","_mountComponent","../../../../../documents/misago/frontend/src/components/auth-message","../../../../../documents/misago/frontend/src/utils/mount-component","react-redux",5,"_store2","addReducer","_auth2","assign","isAuthenticated","isAnonymous","user","_auth","initialState","_store","../../../../../documents/misago/frontend/src/reducers/auth","../../../../../documents/misago/frontend/src/services/store",6,"_localStorage2","_modal2","_modal","_localStorage","../../../../../documents/misago/frontend/src/services/auth","../../../../../documents/misago/frontend/src/services/local-storage","../../../../../documents/misago/frontend/src/services/modal",7,"_bannedPage2","_bannedPage","../../../../../documents/misago/frontend/src/utils/banned-page",8,"_captcha2","_include2","_snackbar2","_captcha","_include","_snackbar","../../../../../documents/misago/frontend/src/services/captcha","../../../../../documents/misago/frontend/src/services/include","../../../../../documents/misago/frontend/src/services/snackbar",9,10,11,"element","document","getElementById","_mobileNavbarDropdown2","_mobileNavbarDropdown","../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown",12,13,"_moment2","locale","$","attr","_moment","moment",14,"_routedComponent2","root","component","_root","Options","paths","_routedComponent","../../../../../documents/misago/frontend/src/components/options/root","../../../../../documents/misago/frontend/src/utils/routed-component",15,"_pageTitle2","forum_name","_pageTitle","../../../../../documents/misago/frontend/src/services/page-title",16,"_requestActivationLink2","_requestActivationLink","../../../../../documents/misago/frontend/src/components/request-activation-link",17,"_requestPasswordReset2","_requestPasswordReset","../../../../../documents/misago/frontend/src/components/request-password-reset",18,"_resetPasswordForm2","_resetPasswordForm","../../../../../documents/misago/frontend/src/components/reset-password-form",19,"Snackbar","../../../../../documents/misago/frontend/src/components/snackbar",20,"../../../../../documents/misago/frontend/src/reducers/snackbar",21,22,23,"_tick2","_tick","../../../../../documents/misago/frontend/src/reducers/tick",24,"setInterval","dispatch","doTick","TICK_PERIOD",25,"UserMenu","CompactUserMenu","../../../../../documents/misago/frontend/src/components/user-menu/root",26,"_usernameHistory2","_usernameHistory","../../../../../documents/misago/frontend/src/reducers/username-history",27,"_zxcvbn2","_zxcvbn","../../../../../documents/misago/frontend/src/services/zxcvbn",28,"isUndefinedOrNull","isBuffer","x","copy","slice","objEquiv","b","opts","isArguments","pSlice","deepEqual","ka","objectKeys","kb","sort","actual","expected","Date","getTime","strict","./lib/is_arguments.js","./lib/keys.js",29,"supported","object","toString","unsupported","propertyIsEnumerable","supportsArgumentsClass",30,"shim","keys",31,"PUSH","REPLACE","POP",32,"loopAsync","turns","work","callback","done","isDone","next","currentTurn",33,"createKey","KeyPrefix","saveState","state","sessionStorage","setItem","JSON","stringify","error","SecurityError","NODE_ENV","_warning2","QuotaExceededError","readState","json","getItem","parse","_warning","_process","warning",34,"addEventListener","node","event","listener","attachEvent","removeEventListener","detachEvent","getHashPath","location","href","split","replaceHashPath","path","replace","pathname","search","getWindowPath","hash","go","history","getUserConfirmation","message","confirm","supportsHistory","ua","navigator","userAgent","indexOf","supportsGoWithoutReloadUsingHash",35,"canUseDOM","createElement",36,"createBrowserHistory","getCurrentLocation","historyState","_DOMUtils","_historyState","_DOMStateStorage","isSupported","replaceState","_extends","_parsePath2","createLocation","startPopStateListener","_ref","popStateListener","transitionTo","finishTransition","basename","action","_Actions","useRefresh","pushState","listenBefore","listenerCount","stopPopStateListener","unlisten","listen","registerTransitionHook","hook","unregisterTransitionHook","options","_ExecutionEnvironment","_invariant2","forceRefresh","_createDOMHistory2","source","_invariant","_createDOMHistory","_parsePath","./Actions","./DOMStateStorage","./DOMUtils","./ExecutionEnvironment","./createDOMHistory","./parsePath","invariant",37,"createDOMHistory","_createHistory2","_createHistory","./createHistory",38,"createRandomKey","Math","random","substr","locationsAreEqual","_deepEqual2","createHistory","transitionHooks","filter","getCurrent","pendingLocation","allKeys","updateLocation","newLocation","current","changeListeners","_location","confirmTransitionTo","_AsyncUtils","index","_runTransitionHook2","result","ok","nextLocation","prevPath","createPath","nextPath","prevIndex","nextIndex","goBack","goForward","keyLength","createHref","_createLocation3","setState","updateLocationState","DefaultKeyLength","_deprecate2","_deepEqual","_createLocation2","_runTransitionHook","_deprecate","./AsyncUtils","./createLocation","./deprecate","./runTransitionHook","deep-equal",39,"_fourthArg",40,"deprecate","fn",41,"extractPath","string","match","substring",42,"parsePath","_extractPath2","hashIndex","searchIndex","_extractPath","./extractPath",43,"runTransitionHook",44,"condition","format","c","d","argIndex","framesToPop",45,46,"_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","auth","signedIn","signedOut","_react","_react2","_class","_React$Component","getPrototypeOf","reload","interpolate","gettext","username","className","getClassName","getMessage","type","onClick","refresh","Component","react",47,"BASE_URL","size","url","id","avatar_hash","src","getSrc",48,"html","dangerouslySetInnerHTML","__html","plain","expires","isAfter","expires_on","fromNow","getReasonMessage","getExpirationMessage",49,"_loader","_loader2","Button","disabled","loading","children","defaultProps","./loader",50,"_avatar","_button","_button2","cropAvatar","isLoading","avatarType","upload","cropit","post","api_url","avatar","crop","offset","zoom","then","data","onComplete","success","detail","rejection","status","showError","crop_tmp","crop_org","secret","getAvatarSecret","getAvatarHash","join","_this2","width","getAvatarSize","height","imageState","getImagePath","onImageLoaded","zoomLevel","imageSize","displayedWidth","offsetX","y","displayedHeight","offsetY","showIndex","../../services/ajax","../../services/snackbar","../avatar","../button",51,"Gallery","GalleryItem","_batch","_batch2","_Object$getPrototypeO","_temp","_ret","_len","_key","image","selection","_React$Component2","_this3","images","map","row","_React$Component3","_this4","save","response","_this5","galleries","../../index","../../utils/batch",52,"_avatar2","setGravatar","callApi","setGenerated","gravatar","showCrop","showUpload","showGallery","getAvatarPreview","getGravatarButton","getCropButton","getUploadButton","getGalleryButton","../loader",53,"ChangeAvatarError","_crop","_crop2","_upload","_upload2","_gallery","_gallery2","_modalLoader","_modalLoader2","_users","reason","getErrorReason","completeFlow","avatarHash","updateAvatar","role","data-dismiss","aria-label","aria-hidden","getBody","../../reducers/users","../../services/store","../modal-loader","./crop","./gallery","./index","./upload",54,"_fileSize","_fileSize2","pickFile","click","uploadFile","files","validationError","validateFile","preview","URL","createObjectURL","progress","FormData","append","uploaded","info","limit","filesize","invalidTypeMsg","allowed_mime_types","extensionFound","loweredFilename","toLowerCase","allowed_extensions","extension","extensions","getUploadRequirements","aria-valuenow","aria-valuemin","aria-valuemax","style","getUploadProgressLabel","onChange","getUploadProgress","renderCrop","renderUpload","../../utils/file-size",55,"validation","isValidated","helpText","labelClass","htmlFor","label","controlClass","getFeedbackIcon","getFeedbackDescription","getFeedback","getHelpText","extra",56,"_validators","validateRequired","required","bindInput","newState","formErrors","errors","validateField","handleSubmit","preventDefault","clean","promise","send","handleSuccess","handleError","validators","optional","validatedFields","fieldErrors","validate","field","requiredError","../utils/validators",57,"isActive","activeClassName",58,59,60,"_interopRequireWildcard","newObj","UsernameHistory","ChangeUsernameLoading","NoChangesLeft","ChangeUsername","_form","_form2","_formGroup","_formGroup2","_random","_Form","usernameContent","usernameMinLength","username_length_min","length_min","usernameMaxLength","username_length_max","length_max","phrases","changes_left","ngettext","acl","name_changes_expire","trim","complete","slug","apiError","onSubmit","for","next_on","next_change","changed_by","absolute_url","changed_by_username","changes","renderUserAvatar","renderUsername","old_username","new_username","changed_on","range","isLoaded","renderHistory","renderEmptyHistory","renderHistoryPreview","_React$Component4","_this6","addNameChange","updateUsername","_this7","set","parent","Promise","all","dehydrate","results","getChangeForm","../../reducers/username-history","../../services/page-title","../../utils/random","../../utils/validators","../form","../form-group",61,"_select","_select2","_yesNoSwitch","_yesNoSwitch2","is_hiding_presence","limits_private_thread_invites_to","subscribe_to_started_threads","subscribe_to_replied_threads","privateThreadInvitesChoices","icon","subscribeToChoices","patchUser","iconOn","iconOff","labelOn","labelOff","choices","../../reducers/auth","../select","../yes-no-switch",62,"CompactNav","SideNav","_reactRouter","_li","_li2","option","Link","to","baseUrl","../li","react-router",63,"store","tick","username-history","_forumOptions2","_changeUsername2","_signInCredentials2","_navs","_forumOptions","_changeUsername","_signInCredentials","toggleNav","dropdown","aria-haspopup","aria-expanded","getCompactNavClassName","./change-username","./forum-options","./navs","./sign-in-credentials",64,"ChangePassword","ChangeEmail","new_email","password","email","lengths","change_email","display","_Form2","new_password","repeat_password","passwordMinLength","change_password",65,"LABELS","STYLES","_score","_password","_inputs","inputs","cacheStale","scorePassword","score","getScore","../services/zxcvbn",66,"_register","_register2","showRegisterModal","account_activation","show","load","../services/captcha","../services/modal","../services/snackbar","./register.js",67,"RegisterComplete","RegisterForm","_passwordStrength","_passwordStrength2","captcha","validator","isValid","apiResponse","ban","hide","aria-describedby","form","getLegalFootNote","activation","getLead","getSubscript","completeRegistration","signIn","../index","../services/ajax","../services/auth","../utils/banned-page","./button","./form","./form-group","./password-strength",68,"LinkSent","RequestLinkForm","placeholder","reset",69,"AccountInactivePage","RequestResetForm","_reactDom","_reactDom2","showInactivePage","getActivateButton","render","react-dom",70,"PasswordChangedPage","ResetPasswordForm","_signIn","_signIn2","showSignIn","softSignOut","remove","./sign-in.js",71,"change","choice","getChoice","data-toggle","getIcon","getLabel",72,"showActivation","find","val","getCsrfToken","submit","getActivationButton",73,"snackbar","TYPES_CLASSES","snackbarClass","isVisible","getSnackbarClass",74,"CompactGuestNav","GuestNav","GuestMenu","_registerButton","_registerButton2","showSignInModal","_GuestMenu","showGuestMenu","../../services/mobile-navbar-dropdown","../../services/modal","../register-button","../sign-in.js",75,"_guestNav","_userNav","UserNav","CompactUserNav","./guest-nav","./user-nav",76,"selectUserMenu","_root2","decision","changeAvatar","logout","showConnected","showUserMenu","../change-avatar/root",77,"toggle",78,"./utils/ordered-list",79,"patch","PATCH_USER","SIGN_IN","signOut","soft","SIGN_OUT","UPDATE_AVATAR","userId","_newState","UPDATE_USERNAME","_newState2","./users",80,"showSnackbar","SHOW_SNACKBAR","messageType","hideSnackbar","HIDE_SNACKBAR",81,"TICK",82,"changedBy","ADD_NAME_CHANGE","items","DEHYDRATE_RESULT","unshift","floor","now",83,84,"Ajax","_cookieName","_csrfToken","cookieName","cookie","cookieRegex","RegExp","method","resolve","reject","xhr","headers","X-CSRFToken","contentType","dataType","jqXHR","responseJSON","statusText","ajax","params","param","request","processData","XMLHttpRequest","evt","lengthComputable","round","loaded","total",85,"Auth","local","modal","_local","syncSession","watchState","getState","watch","../reducers/auth",86,"Captcha","ReCaptcha","ReCaptchaComponent","QACaptcha","NoCaptcha","BaseCaptcha","include","_BaseCaptcha","_BaseCaptcha2","question","help_text","kwargs","grecaptcha","sitekey","siteKey","_BaseCaptcha3","wait","recaptcha_site_key","captcha_type","../components/form-group",87,"Include","staticUrl","_staticUrl","_included","script","remote","cache",88,"storage","localStorage","LocalStorage","prefix","_prefix","_watchers","newValueJson","newValue","watcher","oldValue","itemString",89,"MobileNavbarDropdown","_element","_component","addClass","removeClass","../utils/mount-component",90,"Modal","unmountComponentAtNode",91,"PageTitle","forumName","_forumName","finalTitle","page","pageLabel",92,"HIDE_ANIMATION_LENGTH","MESSAGE_SHOW_LENGTH","_timeout","alert","../reducers/snackbar",93,"StoreWrapper","_redux","_reducers","_initialState","reducer","createStore","combineReducers","redux",94,"Zxcvbn","zxcvbn","_loadingPromise","_loadedPromise",95,"changeState","Provider","getStore","RedrawedBannedPage","../components/banned-page","../services/store",96,"list","rowWidth","padding","rows",97,"bytes",98,"rootElementId","connected","rootElement",99,"OrderedList","isOrdered","_items","order","values","values_only","_order","unordered","insertItem","insertAt","ordering","ordered","splice","iterations",100,"int","min","max",101,"routes","childRoutes","onEnter","nextState","Router","_createBrowserHistory","_createBrowserHistory2","history/lib/createBrowserHistory",102,"EMAIL","test","minLength","limitValue","returnMessage","limit_value","show_value","maxLength","settings","USERNAME","password_length_min"],"mappings":"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","file":"misago.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\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 = setTimeout(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    clearTimeout(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        setTimeout(drainQueue, 0);\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;\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},{}],2:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Misago = undefined;\n\nvar _orderedList = require('../../../../documents/misago/frontend/src/utils/ordered-list');\n\nvar _orderedList2 = _interopRequireDefault(_orderedList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Misago = exports.Misago = function () {\n  function Misago() {\n    _classCallCheck(this, Misago);\n\n    this._initializers = [];\n    this._context = {};\n  }\n\n  _createClass(Misago, [{\n    key: 'addInitializer',\n    value: function addInitializer(initializer) {\n      this._initializers.push({\n        key: initializer.name,\n\n        item: initializer.initializer,\n\n        after: initializer.after,\n        before: initializer.before\n      });\n    }\n  }, {\n    key: 'init',\n    value: function init(context) {\n      var _this = this;\n\n      this._context = context;\n\n      var initOrder = new _orderedList2.default(this._initializers).orderedValues();\n      initOrder.forEach(function (initializer) {\n        initializer(_this);\n      });\n    }\n\n    // context accessors\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      return this._context.hasOwnProperty(key);\n    }\n  }, {\n    key: 'get',\n    value: function get(key, fallback) {\n      if (this.has(key)) {\n        return this._context[key];\n      } else {\n        return fallback || undefined;\n      }\n    }\n  }]);\n\n  return Misago;\n}();\n\n// create  singleton\n\nvar misago = new Misago();\n\n// expose it globally\nglobal.misago = misago;\n\n// and export it for tests and stuff\nexports.default = misago;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../../../documents/misago/frontend/src/utils/ordered-list\":99}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _ajax2.default.init(_index2.default.get('CSRF_COOKIE_NAME'));\n}\n\n_index2.default.addInitializer({\n  name: 'ajax',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/ajax\":84}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _authMessage = require('../../../../../documents/misago/frontend/src/components/auth-message');\n\nvar _authMessage2 = _interopRequireDefault(_authMessage);\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_authMessage.select)(_authMessage2.default), 'auth-message-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:auth-message',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/auth-message\":46,\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/utils/mount-component\":98,\"react-redux\":\"react-redux\"}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _auth = require('../../../../../documents/misago/frontend/src/reducers/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _store2.default.addReducer('auth', _auth2.default, Object.assign({\n    'isAuthenticated': context.get('isAuthenticated'),\n    'isAnonymous': !context.get('isAuthenticated'),\n\n    'user': context.get('user')\n  }, _auth.initialState));\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:auth',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/reducers/auth\":79,\"../../../../../documents/misago/frontend/src/services/store\":93}],6:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _auth = require('../../../../../documents/misago/frontend/src/services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _modal = require('../../../../../documents/misago/frontend/src/services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _auth2.default.init(_store2.default, _localStorage2.default, _modal2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'auth',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/auth\":85,\"../../../../../documents/misago/frontend/src/services/local-storage\":88,\"../../../../../documents/misago/frontend/src/services/modal\":90,\"../../../../../documents/misago/frontend/src/services/store\":93}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _bannedPage = require('../../../../../documents/misago/frontend/src/utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.get('BAN_MESSAGE')) {\n    (0, _bannedPage2.default)(context.get('BAN_MESSAGE'), false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:baned-page',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/utils/banned-page\":95}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _captcha = require('../../../../../documents/misago/frontend/src/services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _include = require('../../../../../documents/misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _captcha2.default.init(context, _ajax2.default, _include2.default, _snackbar2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'captcha',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/ajax\":84,\"../../../../../documents/misago/frontend/src/services/captcha\":86,\"../../../../../documents/misago/frontend/src/services/include\":87,\"../../../../../documents/misago/frontend/src/services/snackbar\":92}],9:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _include = require('../../../../../documents/misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _include2.default.init(context.get('STATIC_URL'));\n}\n\n_index2.default.addInitializer({\n  name: 'include',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/include\":87}],10:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _localStorage2.default.init('misago_');\n}\n\n_index2.default.addInitializer({\n  name: 'local-storage',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/local-storage\":88}],11:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mobileNavbarDropdown = require('../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  var element = document.getElementById('mobile-navbar-dropdown-mount');\n  if (element) {\n    _mobileNavbarDropdown2.default.init(element);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'dropdown',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown\":89}],12:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _modal = require('../../../../../documents/misago/frontend/src/services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  var element = document.getElementById('modal-mount');\n  if (element) {\n    _modal2.default.init(element);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'modal',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/modal\":90}],13:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _moment2.default.locale($('html').attr('lang'));\n}\n\n_index2.default.addInitializer({\n  name: 'moment',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"moment\":\"moment\"}],14:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _root = require('../../../../../documents/misago/frontend/src/components/options/root');\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _routedComponent = require('../../../../../documents/misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.get('USER_OPTIONS')) {\n    (0, _routedComponent2.default)({\n      root: _index2.default.get('USERCP_URL'),\n      component: _root.Options,\n      paths: (0, _root.paths)(_store2.default)\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:options',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/options/root\":63,\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/store\":93,\"../../../../../documents/misago/frontend/src/utils/routed-component\":101}],15:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _pageTitle = require('../../../../../documents/misago/frontend/src/services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _pageTitle2.default.init(context.get('SETTINGS').forum_name);\n}\n\n_index2.default.addInitializer({\n  name: 'page-title',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/page-title\":91}],16:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _requestActivationLink = require('../../../../../documents/misago/frontend/src/components/request-activation-link');\n\nvar _requestActivationLink2 = _interopRequireDefault(_requestActivationLink);\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('request-activation-link-mount')) {\n    (0, _mountComponent2.default)(_requestActivationLink2.default, 'request-activation-link-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:request-activation-link',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/request-activation-link\":68,\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/utils/mount-component\":98}],17:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _requestPasswordReset = require('../../../../../documents/misago/frontend/src/components/request-password-reset');\n\nvar _requestPasswordReset2 = _interopRequireDefault(_requestPasswordReset);\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('request-password-reset-mount')) {\n    (0, _mountComponent2.default)(_requestPasswordReset2.default, 'request-password-reset-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:request-password-reset',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/request-password-reset\":69,\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/utils/mount-component\":98}],18:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _resetPasswordForm = require('../../../../../documents/misago/frontend/src/components/reset-password-form');\n\nvar _resetPasswordForm2 = _interopRequireDefault(_resetPasswordForm);\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('reset-password-form-mount')) {\n    (0, _mountComponent2.default)(_resetPasswordForm2.default, 'reset-password-form-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:reset-password-form',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/reset-password-form\":70,\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/utils/mount-component\":98}],19:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/components/snackbar');\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_snackbar.select)(_snackbar.Snackbar), 'snackbar-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:snackbar',\n  initializer: initializer,\n  after: 'snackbar'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/snackbar\":73,\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/utils/mount-component\":98,\"react-redux\":\"react-redux\"}],20:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/reducers/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('snackbar', _snackbar2.default, _snackbar.initialState);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:snackbar',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/reducers/snackbar\":80,\"../../../../../documents/misago/frontend/src/services/store\":93}],21:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _snackbar2.default.init(_store2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'snackbar',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/snackbar\":92,\"../../../../../documents/misago/frontend/src/services/store\":93}],22:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.init();\n}\n\n_index2.default.addInitializer({\n  name: 'store',\n  initializer: initializer,\n  before: '_end'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/store\":93}],23:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _tick = require('../../../../../documents/misago/frontend/src/reducers/tick');\n\nvar _tick2 = _interopRequireDefault(_tick);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('tick', _tick2.default, _tick.initialState);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:tick',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/reducers/tick\":81,\"../../../../../documents/misago/frontend/src/services/store\":93}],24:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _tick = require('../../../../../documents/misago/frontend/src/reducers/tick');\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TICK_PERIOD = 50 * 1000; //do the tick every 50s\n\nfunction initializer() {\n  window.setInterval(function () {\n    _store2.default.dispatch((0, _tick.doTick)());\n  }, TICK_PERIOD);\n}\n\n_index2.default.addInitializer({\n  name: 'tick-start',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/reducers/tick\":81,\"../../../../../documents/misago/frontend/src/services/store\":93}],25:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _root = require('../../../../../documents/misago/frontend/src/components/user-menu/root');\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.UserMenu), 'user-menu-mount');\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.CompactUserMenu), 'user-menu-compact-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:user-menu',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/user-menu/root\":75,\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/utils/mount-component\":98,\"react-redux\":\"react-redux\"}],26:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory = require('../../../../../documents/misago/frontend/src/reducers/username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('username-history', _usernameHistory2.default, []);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:username-history',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/reducers/username-history\":82,\"../../../../../documents/misago/frontend/src/services/store\":93}],27:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _include = require('../../../../../documents/misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nvar _zxcvbn = require('../../../../../documents/misago/frontend/src/services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _zxcvbn2.default.init(_include2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'zxcvbn',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":78,\"../../../../../documents/misago/frontend/src/services/include\":87,\"../../../../../documents/misago/frontend/src/services/zxcvbn\":94}],28:[function(require,module,exports){\nvar pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n\n},{\"./lib/is_arguments.js\":29,\"./lib/keys.js\":30}],29:[function(require,module,exports){\nvar supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n\n},{}],30:[function(require,module,exports){\nexports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n\n},{}],31:[function(require,module,exports){\n/**\n * Indicates that navigation was caused by a call to history.push.\n */\n'use strict';\n\nexports.__esModule = true;\nvar PUSH = 'PUSH';\n\nexports.PUSH = PUSH;\n/**\n * Indicates that navigation was caused by a call to history.replace.\n */\nvar REPLACE = 'REPLACE';\n\nexports.REPLACE = REPLACE;\n/**\n * Indicates that navigation was caused by some other action such\n * as using a browser's back/forward buttons and/or manually manipulating\n * the URL in a browser's location bar. This is the default.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate\n * for more information.\n */\nvar POP = 'POP';\n\nexports.POP = POP;\nexports['default'] = {\n  PUSH: PUSH,\n  REPLACE: REPLACE,\n  POP: POP\n};\n},{}],32:[function(require,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\nexports.loopAsync = loopAsync;\n\nfunction loopAsync(turns, work, callback) {\n  var currentTurn = 0;\n  var isDone = false;\n\n  function done() {\n    isDone = true;\n    callback.apply(this, arguments);\n  }\n\n  function next() {\n    if (isDone) return;\n\n    if (currentTurn < turns) {\n      work.call(this, currentTurn++, next, done);\n    } else {\n      done.apply(this, arguments);\n    }\n  }\n\n  next();\n}\n},{}],33:[function(require,module,exports){\n(function (process){\n/*eslint-disable no-empty */\n'use strict';\n\nexports.__esModule = true;\nexports.saveState = saveState;\nexports.readState = readState;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar KeyPrefix = '@@History/';\nvar QuotaExceededError = 'QuotaExceededError';\nvar SecurityError = 'SecurityError';\n\nfunction createKey(key) {\n  return KeyPrefix + key;\n}\n\nfunction saveState(key, state) {\n  try {\n    window.sessionStorage.setItem(createKey(key), JSON.stringify(state));\n  } catch (error) {\n    if (error.name === SecurityError) {\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n      // attempt to access window.sessionStorage.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;\n\n      return;\n    }\n\n    if (error.name === QuotaExceededError && window.sessionStorage.length === 0) {\n      // Safari \"private mode\" throws QuotaExceededError.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;\n\n      return;\n    }\n\n    throw error;\n  }\n}\n\nfunction readState(key) {\n  var json = undefined;\n  try {\n    json = window.sessionStorage.getItem(createKey(key));\n  } catch (error) {\n    if (error.name === SecurityError) {\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n      // attempt to access window.sessionStorage.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;\n\n      return null;\n    }\n  }\n\n  if (json) {\n    try {\n      return JSON.parse(json);\n    } catch (error) {\n      // Ignore invalid JSON.\n    }\n  }\n\n  return null;\n}\n}).call(this,require('_process'))\n},{\"_process\":1,\"warning\":45}],34:[function(require,module,exports){\n'use strict';\n\nexports.__esModule = true;\nexports.addEventListener = addEventListener;\nexports.removeEventListener = removeEventListener;\nexports.getHashPath = getHashPath;\nexports.replaceHashPath = replaceHashPath;\nexports.getWindowPath = getWindowPath;\nexports.go = go;\nexports.getUserConfirmation = getUserConfirmation;\nexports.supportsHistory = supportsHistory;\nexports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;\n\nfunction addEventListener(node, event, listener) {\n  if (node.addEventListener) {\n    node.addEventListener(event, listener, false);\n  } else {\n    node.attachEvent('on' + event, listener);\n  }\n}\n\nfunction removeEventListener(node, event, listener) {\n  if (node.removeEventListener) {\n    node.removeEventListener(event, listener, false);\n  } else {\n    node.detachEvent('on' + event, listener);\n  }\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  return window.location.href.split('#')[1] || '';\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(window.location.pathname + window.location.search + '#' + path);\n}\n\nfunction getWindowPath() {\n  return window.location.pathname + window.location.search + window.location.hash;\n}\n\nfunction go(n) {\n  if (n) window.history.go(n);\n}\n\nfunction getUserConfirmation(message, callback) {\n  callback(window.confirm(message));\n}\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {\n    return false;\n  }\n  // FIXME: Work around our browser history not working correctly on Chrome\n  // iOS: https://github.com/rackt/react-router/issues/2565\n  if (ua.indexOf('CriOS') !== -1) {\n    return false;\n  }\n  return window.history && 'pushState' in window.history;\n}\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  var ua = navigator.userAgent;\n  return ua.indexOf('Firefox') === -1;\n}\n},{}],35:[function(require,module,exports){\n'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexports.canUseDOM = canUseDOM;\n},{}],36:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _Actions = require('./Actions');\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _DOMStateStorage = require('./DOMStateStorage');\n\nvar _createDOMHistory = require('./createDOMHistory');\n\nvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\n/**\n * Creates and returns a history object that uses HTML5's history API\n * (pushState, replaceState, and the popstate event) to manage history.\n * This is the recommended method of managing history in browsers because\n * it provides the cleanest URLs.\n *\n * Note: In browsers that do not support the HTML5 history API full\n * page reloads will be used to preserve URLs.\n */\nfunction createBrowserHistory() {\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n  !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;\n\n  var forceRefresh = options.forceRefresh;\n\n  var isSupported = _DOMUtils.supportsHistory();\n  var useRefresh = !isSupported || forceRefresh;\n\n  function getCurrentLocation(historyState) {\n    historyState = historyState || window.history.state || {};\n\n    var path = _DOMUtils.getWindowPath();\n    var _historyState = historyState;\n    var key = _historyState.key;\n\n    var state = undefined;\n    if (key) {\n      state = _DOMStateStorage.readState(key);\n    } else {\n      state = null;\n      key = history.createKey();\n\n      if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path);\n    }\n\n    var location = _parsePath2['default'](path);\n\n    return history.createLocation(_extends({}, location, { state: state }), undefined, key);\n  }\n\n  function startPopStateListener(_ref) {\n    var transitionTo = _ref.transitionTo;\n\n    function popStateListener(event) {\n      if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.\n\n      transitionTo(getCurrentLocation(event.state));\n    }\n\n    _DOMUtils.addEventListener(window, 'popstate', popStateListener);\n\n    return function () {\n      _DOMUtils.removeEventListener(window, 'popstate', popStateListener);\n    };\n  }\n\n  function finishTransition(location) {\n    var basename = location.basename;\n    var pathname = location.pathname;\n    var search = location.search;\n    var hash = location.hash;\n    var state = location.state;\n    var action = location.action;\n    var key = location.key;\n\n    if (action === _Actions.POP) return; // Nothing to do.\n\n    _DOMStateStorage.saveState(key, state);\n\n    var path = (basename || '') + pathname + search + hash;\n    var historyState = {\n      key: key\n    };\n\n    if (action === _Actions.PUSH) {\n      if (useRefresh) {\n        window.location.href = path;\n        return false; // Prevent location update.\n      } else {\n          window.history.pushState(historyState, null, path);\n        }\n    } else {\n      // REPLACE\n      if (useRefresh) {\n        window.location.replace(path);\n        return false; // Prevent location update.\n      } else {\n          window.history.replaceState(historyState, null, path);\n        }\n    }\n  }\n\n  var history = _createDOMHistory2['default'](_extends({}, options, {\n    getCurrentLocation: getCurrentLocation,\n    finishTransition: finishTransition,\n    saveState: _DOMStateStorage.saveState\n  }));\n\n  var listenerCount = 0,\n      stopPopStateListener = undefined;\n\n  function listenBefore(listener) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    var unlisten = history.listenBefore(listener);\n\n    return function () {\n      unlisten();\n\n      if (--listenerCount === 0) stopPopStateListener();\n    };\n  }\n\n  function listen(listener) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    var unlisten = history.listen(listener);\n\n    return function () {\n      unlisten();\n\n      if (--listenerCount === 0) stopPopStateListener();\n    };\n  }\n\n  // deprecated\n  function registerTransitionHook(hook) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    history.registerTransitionHook(hook);\n  }\n\n  // deprecated\n  function unregisterTransitionHook(hook) {\n    history.unregisterTransitionHook(hook);\n\n    if (--listenerCount === 0) stopPopStateListener();\n  }\n\n  return _extends({}, history, {\n    listenBefore: listenBefore,\n    listen: listen,\n    registerTransitionHook: registerTransitionHook,\n    unregisterTransitionHook: unregisterTransitionHook\n  });\n}\n\nexports['default'] = createBrowserHistory;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./Actions\":31,\"./DOMStateStorage\":33,\"./DOMUtils\":34,\"./ExecutionEnvironment\":35,\"./createDOMHistory\":37,\"./parsePath\":42,\"_process\":1,\"invariant\":44}],37:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\n\nfunction createDOMHistory(options) {\n  var history = _createHistory2['default'](_extends({\n    getUserConfirmation: _DOMUtils.getUserConfirmation\n  }, options, {\n    go: _DOMUtils.go\n  }));\n\n  function listen(listener) {\n    !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;\n\n    return history.listen(listener);\n  }\n\n  return _extends({}, history, {\n    listen: listen\n  });\n}\n\nexports['default'] = createDOMHistory;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./DOMUtils\":34,\"./ExecutionEnvironment\":35,\"./createHistory\":38,\"_process\":1,\"invariant\":44}],38:[function(require,module,exports){\n//import warning from 'warning'\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _deepEqual = require('deep-equal');\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nvar _Actions = require('./Actions');\n\nvar _createLocation2 = require('./createLocation');\n\nvar _createLocation3 = _interopRequireDefault(_createLocation2);\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\nvar _deprecate = require('./deprecate');\n\nvar _deprecate2 = _interopRequireDefault(_deprecate);\n\nfunction createRandomKey(length) {\n  return Math.random().toString(36).substr(2, length);\n}\n\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search &&\n  //a.action === b.action && // Different action !== location change.\n  a.key === b.key && _deepEqual2['default'](a.state, b.state);\n}\n\nvar DefaultKeyLength = 6;\n\nfunction createHistory() {\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n  var getCurrentLocation = options.getCurrentLocation;\n  var finishTransition = options.finishTransition;\n  var saveState = options.saveState;\n  var go = options.go;\n  var keyLength = options.keyLength;\n  var getUserConfirmation = options.getUserConfirmation;\n\n  if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;\n\n  var transitionHooks = [];\n\n  function listenBefore(hook) {\n    transitionHooks.push(hook);\n\n    return function () {\n      transitionHooks = transitionHooks.filter(function (item) {\n        return item !== hook;\n      });\n    };\n  }\n\n  var allKeys = [];\n  var changeListeners = [];\n  var location = undefined;\n\n  function getCurrent() {\n    if (pendingLocation && pendingLocation.action === _Actions.POP) {\n      return allKeys.indexOf(pendingLocation.key);\n    } else if (location) {\n      return allKeys.indexOf(location.key);\n    } else {\n      return -1;\n    }\n  }\n\n  function updateLocation(newLocation) {\n    var current = getCurrent();\n\n    location = newLocation;\n\n    if (location.action === _Actions.PUSH) {\n      allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);\n    } else if (location.action === _Actions.REPLACE) {\n      allKeys[current] = location.key;\n    }\n\n    changeListeners.forEach(function (listener) {\n      listener(location);\n    });\n  }\n\n  function listen(listener) {\n    changeListeners.push(listener);\n\n    if (location) {\n      listener(location);\n    } else {\n      var _location = getCurrentLocation();\n      allKeys = [_location.key];\n      updateLocation(_location);\n    }\n\n    return function () {\n      changeListeners = changeListeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function confirmTransitionTo(location, callback) {\n    _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {\n      _runTransitionHook2['default'](transitionHooks[index], location, function (result) {\n        if (result != null) {\n          done(result);\n        } else {\n          next();\n        }\n      });\n    }, function (message) {\n      if (getUserConfirmation && typeof message === 'string') {\n        getUserConfirmation(message, function (ok) {\n          callback(ok !== false);\n        });\n      } else {\n        callback(message !== false);\n      }\n    });\n  }\n\n  var pendingLocation = undefined;\n\n  function transitionTo(nextLocation) {\n    if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.\n\n    pendingLocation = nextLocation;\n\n    confirmTransitionTo(nextLocation, function (ok) {\n      if (pendingLocation !== nextLocation) return; // Transition was interrupted.\n\n      if (ok) {\n        // treat PUSH to current path like REPLACE to be consistent with browsers\n        if (nextLocation.action === _Actions.PUSH) {\n          var prevPath = createPath(location);\n          var nextPath = createPath(nextLocation);\n\n          if (nextPath === prevPath) nextLocation.action = _Actions.REPLACE;\n        }\n\n        if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);\n      } else if (location && nextLocation.action === _Actions.POP) {\n        var prevIndex = allKeys.indexOf(location.key);\n        var nextIndex = allKeys.indexOf(nextLocation.key);\n\n        if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.\n      }\n    });\n  }\n\n  function push(location) {\n    transitionTo(createLocation(location, _Actions.PUSH, createKey()));\n  }\n\n  function replace(location) {\n    transitionTo(createLocation(location, _Actions.REPLACE, createKey()));\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function createKey() {\n    return createRandomKey(keyLength);\n  }\n\n  function createPath(location) {\n    if (location == null || typeof location === 'string') return location;\n\n    var pathname = location.pathname;\n    var search = location.search;\n    var hash = location.hash;\n\n    var result = pathname;\n\n    if (search) result += search;\n\n    if (hash) result += hash;\n\n    return result;\n  }\n\n  function createHref(location) {\n    return createPath(location);\n  }\n\n  function createLocation(location, action) {\n    var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];\n\n    if (typeof action === 'object') {\n      //warning(\n      //  false,\n      //  'The state (2nd) argument to history.createLocation is deprecated; use a ' +\n      //  'location descriptor instead'\n      //)\n\n      if (typeof location === 'string') location = _parsePath2['default'](location);\n\n      location = _extends({}, location, { state: action });\n\n      action = key;\n      key = arguments[3] || createKey();\n    }\n\n    return _createLocation3['default'](location, action, key);\n  }\n\n  // deprecated\n  function setState(state) {\n    if (location) {\n      updateLocationState(location, state);\n      updateLocation(location);\n    } else {\n      updateLocationState(getCurrentLocation(), state);\n    }\n  }\n\n  function updateLocationState(location, state) {\n    location.state = _extends({}, location.state, state);\n    saveState(location.key, location.state);\n  }\n\n  // deprecated\n  function registerTransitionHook(hook) {\n    if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);\n  }\n\n  // deprecated\n  function unregisterTransitionHook(hook) {\n    transitionHooks = transitionHooks.filter(function (item) {\n      return item !== hook;\n    });\n  }\n\n  // deprecated\n  function pushState(state, path) {\n    if (typeof path === 'string') path = _parsePath2['default'](path);\n\n    push(_extends({ state: state }, path));\n  }\n\n  // deprecated\n  function replaceState(state, path) {\n    if (typeof path === 'string') path = _parsePath2['default'](path);\n\n    replace(_extends({ state: state }, path));\n  }\n\n  return {\n    listenBefore: listenBefore,\n    listen: listen,\n    transitionTo: transitionTo,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    createKey: createKey,\n    createPath: createPath,\n    createHref: createHref,\n    createLocation: createLocation,\n\n    setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),\n    registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),\n    unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),\n    pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\n    replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\n  };\n}\n\nexports['default'] = createHistory;\nmodule.exports = exports['default'];\n},{\"./Actions\":31,\"./AsyncUtils\":32,\"./createLocation\":39,\"./deprecate\":40,\"./parsePath\":42,\"./runTransitionHook\":43,\"deep-equal\":28}],39:[function(require,module,exports){\n//import warning from 'warning'\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _Actions = require('./Actions');\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\nfunction createLocation() {\n  var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];\n  var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\n\n  var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];\n\n  if (typeof location === 'string') location = _parsePath2['default'](location);\n\n  if (typeof action === 'object') {\n    //warning(\n    //  false,\n    //  'The state (2nd) argument to createLocation is deprecated; use a ' +\n    //  'location descriptor instead'\n    //)\n\n    location = _extends({}, location, { state: action });\n\n    action = key || _Actions.POP;\n    key = _fourthArg;\n  }\n\n  var pathname = location.pathname || '/';\n  var search = location.search || '';\n  var hash = location.hash || '';\n  var state = location.state || null;\n\n  return {\n    pathname: pathname,\n    search: search,\n    hash: hash,\n    state: state,\n    action: action,\n    key: key\n  };\n}\n\nexports['default'] = createLocation;\nmodule.exports = exports['default'];\n},{\"./Actions\":31,\"./parsePath\":42}],40:[function(require,module,exports){\n//import warning from 'warning'\n\n\"use strict\";\n\nexports.__esModule = true;\nfunction deprecate(fn) {\n  return fn;\n  //return function () {\n  //  warning(false, '[history] ' + message)\n  //  return fn.apply(this, arguments)\n  //}\n}\n\nexports[\"default\"] = deprecate;\nmodule.exports = exports[\"default\"];\n},{}],41:[function(require,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\nfunction extractPath(string) {\n  var match = string.match(/^https?:\\/\\/[^\\/]*/);\n\n  if (match == null) return string;\n\n  return string.substring(match[0].length);\n}\n\nexports[\"default\"] = extractPath;\nmodule.exports = exports[\"default\"];\n},{}],42:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _extractPath = require('./extractPath');\n\nvar _extractPath2 = _interopRequireDefault(_extractPath);\n\nfunction parsePath(path) {\n  var pathname = _extractPath2['default'](path);\n  var search = '';\n  var hash = '';\n\n  process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like \"%s\"', path) : undefined;\n\n  var hashIndex = pathname.indexOf('#');\n  if (hashIndex !== -1) {\n    hash = pathname.substring(hashIndex);\n    pathname = pathname.substring(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n  if (searchIndex !== -1) {\n    search = pathname.substring(searchIndex);\n    pathname = pathname.substring(0, searchIndex);\n  }\n\n  if (pathname === '') pathname = '/';\n\n  return {\n    pathname: pathname,\n    search: search,\n    hash: hash\n  };\n}\n\nexports['default'] = parsePath;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./extractPath\":41,\"_process\":1,\"warning\":45}],43:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction runTransitionHook(hook, location, callback) {\n  var result = hook(location, callback);\n\n  if (hook.length < 2) {\n    // Assume the hook runs synchronously and automatically\n    // call the callback with the return value.\n    callback(result);\n  } else {\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not \"return\" in a transition hook with a callback argument; call the callback instead') : undefined;\n  }\n}\n\nexports['default'] = runTransitionHook;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"_process\":1,\"warning\":45}],44:[function(require,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (\"production\" !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n\n},{}],45:[function(require,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (\"production\" !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n\n},{}],46:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"refresh\",\n    value: function refresh() {\n      window.location.reload();\n    }\n  }, {\n    key: \"getMessage\",\n    value: function getMessage() {\n      if (this.props.signedIn) {\n        return interpolate(gettext(\"You have signed in as %(username)s. Please refresh the page before continuing.\"), { username: this.props.signedIn.username }, true);\n      } else if (this.props.signedOut) {\n        return interpolate(gettext(\"%(username)s, you have been signed out. Please refresh the page before continuing.\"), { username: this.props.user.username }, true);\n      }\n    }\n  }, {\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.signedIn || this.props.signedOut) {\n        return \"auth-message show\";\n      } else {\n        return \"auth-message\";\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          \"div\",\n          { className: \"container\" },\n          _react2.default.createElement(\n            \"p\",\n            { className: \"lead\" },\n            this.getMessage()\n          ),\n          _react2.default.createElement(\n            \"p\",\n            null,\n            _react2.default.createElement(\n              \"button\",\n              { type: \"button\", className: \"btn btn-default\",\n                onClick: this.refresh },\n              gettext(\"Reload page\")\n            ),\n            \" \",\n            _react2.default.createElement(\n              \"span\",\n              { className: \"hidden-xs hidden-sm text-muted\" },\n              gettext(\"or press F5 key.\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(state) {\n  return {\n    user: state.auth.user,\n    signedIn: state.auth.signedIn,\n    signedOut: state.auth.signedOut\n  };\n}\n\n},{\"react\":\"react\"}],47:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_URL = $('base').attr('href') + 'user-avatar/';\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getSrc',\n    value: function getSrc() {\n      var size = this.props.size || 100; // jshint ignore:line\n      var url = BASE_URL;\n\n      if (this.props.user && this.props.user.id) {\n        // just avatar hash, size and user id\n        url += this.props.user.avatar_hash + '/' + size + '/' + this.props.user.id + '.png';\n      } else {\n        // just append avatar size to file to produce no-avatar placeholder\n        url += size + '.png';\n      }\n\n      return url;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement('img', { src: this.getSrc(),\n        className: this.props.className || 'user-avatar',\n        title: gettext(\"User avatar\") });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],48:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getReasonMessage',\n    value: function getReasonMessage() {\n      /* jshint ignore:start */\n      if (this.props.message.html) {\n        return _react2.default.createElement('div', { className: 'lead',\n          dangerouslySetInnerHTML: { __html: this.props.message.html } });\n      } else {\n        return _react2.default.createElement(\n          'p',\n          { className: 'lead' },\n          this.props.message.plain\n        );\n      }\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getExpirationMessage',\n    value: function getExpirationMessage() {\n      if (this.props.expires) {\n        if (this.props.expires.isAfter((0, _moment2.default)())) {\n          return interpolate(gettext(\"This ban expires %(expires_on)s.\"), { 'expires_on': this.props.expires.fromNow() }, true);\n        } else {\n          return gettext(\"This ban has expired.\");\n        }\n      } else {\n        return gettext(\"This ban is permanent.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-error page-error-banned' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'highlight_off'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              this.getReasonMessage(),\n              _react2.default.createElement(\n                'p',\n                { className: 'message-footnote' },\n                this.getExpirationMessage()\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"moment\":\"moment\",\"react\":\"react\"}],49:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar Button = function (_React$Component) {\n  _inherits(Button, _React$Component);\n\n  function Button() {\n    _classCallCheck(this, Button);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Button).apply(this, arguments));\n  }\n\n  _createClass(Button, [{\n    key: 'render',\n    value: function render() {\n      var className = 'btn ' + this.props.className;\n      var disabled = this.props.disabled;\n\n      if (this.props.loading) {\n        className += ' btn-loading';\n        disabled = true;\n      }\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: this.props.onClick ? 'button' : 'submit',\n          className: className,\n          disabled: disabled,\n          onClick: this.props.onClick },\n        this.props.children,\n        this.props.loading ? _react2.default.createElement(_loader2.default, null) : null\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Button;\n}(_react2.default.Component);\n\nexports.default = Button;\n\nButton.defaultProps = {\n  className: \"btn-default\",\n\n  type: \"submit\",\n\n  loading: false,\n  disabled: false,\n\n  onClick: null\n};\n\n},{\"./loader\":58,\"react\":\"react\"}],50:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar BASE_URL = $('base').attr('href') + 'user-avatar';\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.cropAvatar = function () {\n      if (_this.state.isLoading) {\n        return false;\n      }\n\n      _this.setState({\n        'isLoading': true\n      });\n\n      var avatarType = _this.props.upload ? 'crop_tmp' : 'crop_org';\n      var cropit = $('.crop-form');\n\n      _ajax2.default.post(_this.props.user.api_url.avatar, {\n        'avatar': avatarType,\n        'crop': {\n          'offset': cropit.cropit('offset'),\n          'zoom': cropit.cropit('zoom')\n        }\n      }).then(function (data) {\n        _this.props.onComplete(data.avatar_hash, data.options);\n        _snackbar2.default.success(data.detail);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this.setState({\n            'isLoading': false\n          });\n        } else {\n          _this.props.showError(rejection);\n        }\n      });\n    };\n\n    _this.state = {\n      'isLoading': false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getAvatarSize',\n    value: function getAvatarSize() {\n      if (this.props.upload) {\n        return this.props.options.crop_tmp.size;\n      } else {\n        return this.props.options.crop_org.size;\n      }\n    }\n  }, {\n    key: 'getAvatarSecret',\n    value: function getAvatarSecret() {\n      if (this.props.upload) {\n        return this.props.options.crop_tmp.secret;\n      } else {\n        return this.props.options.crop_org.secret;\n      }\n    }\n  }, {\n    key: 'getAvatarHash',\n    value: function getAvatarHash() {\n      return this.props.upload || this.props.user.avatar_hash;\n    }\n  }, {\n    key: 'getImagePath',\n    value: function getImagePath() {\n      return [BASE_URL, this.getAvatarSecret() + ':' + this.getAvatarHash(), this.props.user.id + '.png'].join('/');\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      var cropit = $('.crop-form');\n      cropit.width(this.getAvatarSize());\n\n      cropit.cropit({\n        'width': this.getAvatarSize(),\n        'height': this.getAvatarSize(),\n        'imageState': {\n          'src': this.getImagePath()\n        },\n        onImageLoaded: function onImageLoaded() {\n          if (_this2.props.upload) {\n            // center uploaded image\n            var zoomLevel = cropit.cropit('zoom');\n            var imageSize = cropit.cropit('imageSize');\n\n            // is it wider than taller?\n            if (imageSize.width > imageSize.height) {\n              var displayedWidth = imageSize.width * zoomLevel;\n              var offsetX = (displayedWidth - _this2.getAvatarSize()) / -2;\n\n              cropit.cropit('offset', {\n                'x': offsetX,\n                'y': 0\n              });\n            } else if (imageSize.width < imageSize.height) {\n              var displayedHeight = imageSize.height * zoomLevel;\n              var offsetY = (displayedHeight - _this2.getAvatarSize()) / -2;\n\n              cropit.cropit('offset', {\n                'x': 0,\n                'y': offsetY\n              });\n            }\n          } else {\n            // use preserved crop\n            var crop = _this2.props.options.crop_org.crop;\n            if (crop) {\n              cropit.cropit('zoom', crop.zoom);\n              cropit.cropit('offset', {\n                'x': crop.x,\n                'y': crop.y\n              });\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      $('.crop-form').cropit('disable');\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body modal-avatar-crop' },\n          _react2.default.createElement(\n            'div',\n            { className: 'crop-form' },\n            _react2.default.createElement('div', { className: 'cropit-image-preview' }),\n            _react2.default.createElement('input', { type: 'range', className: 'cropit-image-zoom-input' })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-6 col-md-offset-3' },\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.cropAvatar,\n                loading: this.state.isLoading,\n                className: 'btn-primary btn-block' },\n              this.props.upload ? gettext(\"Set avatar\") : gettext(\"Crop image\")\n            ),\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.props.showIndex,\n                disabled: this.state.isLoading,\n                className: 'btn-default btn-block' },\n              gettext(\"Cancel\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":84,\"../../services/snackbar\":92,\"../avatar\":47,\"../button\":49,\"react\":\"react\"}],51:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Gallery = exports.GalleryItem = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _batch = require('../../utils/batch');\n\nvar _batch2 = _interopRequireDefault(_batch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar GalleryItem = exports.GalleryItem = function (_React$Component) {\n  _inherits(GalleryItem, _React$Component);\n\n  function GalleryItem() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, GalleryItem);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(GalleryItem)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.select = function () {\n      _this.props.select(_this.props.image);\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(GalleryItem, [{\n    key: 'getClassName',\n\n    /* jshint ignore:end */\n\n    value: function getClassName() {\n      if (this.props.selection === this.props.image) {\n        if (this.props.disabled) {\n          return 'btn btn-avatar btn-disabled avatar-selected';\n        } else {\n          return 'btn btn-avatar avatar-selected';\n        }\n      } else if (this.props.disabled) {\n        return 'btn btn-avatar btn-disabled';\n      } else {\n        return 'btn btn-avatar';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button',\n          className: this.getClassName(),\n          disabled: this.props.disabled,\n          onClick: this.select },\n        _react2.default.createElement('img', { src: _index2.default.get('MEDIA_URL') + this.props.image })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GalleryItem;\n}(_react2.default.Component);\n\nvar Gallery = exports.Gallery = function (_React$Component2) {\n  _inherits(Gallery, _React$Component2);\n\n  function Gallery() {\n    _classCallCheck(this, Gallery);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Gallery).apply(this, arguments));\n  }\n\n  _createClass(Gallery, [{\n    key: 'render',\n    value: function render() {\n      var _this3 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'avatars-gallery' },\n        _react2.default.createElement(\n          'h3',\n          null,\n          this.props.name\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'avatars-gallery-images' },\n          (0, _batch2.default)(this.props.images, 4, null).map(function (row, i) {\n            return _react2.default.createElement(\n              'div',\n              { className: 'row', key: i },\n              row.map(function (item, i) {\n                return _react2.default.createElement(\n                  'div',\n                  { className: 'col-xs-3', key: i },\n                  item ? _react2.default.createElement(GalleryItem, { image: item,\n                    disabled: _this3.props.disabled,\n                    select: _this3.props.select,\n                    selection: _this3.props.selection }) : _react2.default.createElement('div', { className: 'blank-avatar' })\n                );\n              })\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Gallery;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component3) {\n  _inherits(_class, _React$Component3);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this4.select = function (image) {\n      _this4.setState({\n        selection: image\n      });\n    };\n\n    _this4.save = function () {\n      if (_this4.state.isLoading) {\n        return false;\n      }\n\n      _this4.setState({\n        'isLoading': true\n      });\n\n      _ajax2.default.post(_this4.props.user.api_url.avatar, {\n        avatar: 'galleries',\n        image: _this4.state.selection\n      }).then(function (response) {\n        _this4.setState({\n          'isLoading': false\n        });\n\n        _snackbar2.default.success(response.detail);\n        _this4.props.onComplete(response.avatar_hash, response.options);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this4.setState({\n            'isLoading': false\n          });\n        } else {\n          _this4.props.showError(rejection);\n        }\n      });\n    };\n\n    _this4.state = {\n      'selection': null,\n      'isLoading': false\n    };\n    return _this4;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      var _this5 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body modal-avatar-gallery' },\n          this.props.options.galleries.map(function (item, i) {\n            return _react2.default.createElement(Gallery, { name: item.name,\n              images: item.images,\n              selection: _this5.state.selection,\n              disabled: _this5.state.isLoading,\n              select: _this5.select,\n              key: i });\n          })\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-6 col-md-offset-3' },\n              _react2.default.createElement(\n                _button2.default,\n                { onClick: this.save,\n                  loading: this.state.isLoading,\n                  disabled: !this.state.selection,\n                  className: 'btn-primary btn-block' },\n                this.state.selection ? gettext(\"Save choice\") : gettext(\"Select avatar\")\n              ),\n              _react2.default.createElement(\n                _button2.default,\n                { onClick: this.props.showIndex,\n                  disabled: this.state.isLoading,\n                  className: 'btn-default btn-block' },\n                gettext(\"Cancel\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":78,\"../../services/ajax\":84,\"../../services/snackbar\":92,\"../../utils/batch\":96,\"../button\":49,\"react\":\"react\"}],52:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _loader = require('../loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.setGravatar = function () {\n      _this.callApi('gravatar');\n    };\n\n    _this.setGenerated = function () {\n      _this.callApi('generated');\n    };\n\n    _this.state = {\n      'isLoading': false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'callApi',\n    value: function callApi(avatarType) {\n      var _this2 = this;\n\n      if (this.state.isLoading) {\n        return false;\n      }\n\n      this.setState({\n        'isLoading': true\n      });\n\n      _ajax2.default.post(this.props.user.api_url.avatar, {\n        avatar: avatarType\n      }).then(function (response) {\n        _this2.setState({\n          'isLoading': false\n        });\n\n        _snackbar2.default.success(response.detail);\n        _this2.props.onComplete(response.avatar_hash, response.options);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this2.setState({\n            'isLoading': false\n          });\n        } else {\n          _this2.props.showError(rejection);\n        }\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getGravatarButton',\n\n    /* jshint ignore:end */\n\n    value: function getGravatarButton() {\n      if (this.props.options.gravatar) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.setGravatar,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-gravatar' },\n          gettext(\"Download my Gravatar\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getCropButton',\n    value: function getCropButton() {\n      if (this.props.options.crop_org) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showCrop,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-crop' },\n          gettext(\"Re-crop uploaded image\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getUploadButton',\n    value: function getUploadButton() {\n      if (this.props.options.upload) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showUpload,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-upload' },\n          gettext(\"Upload new image\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getGalleryButton',\n    value: function getGalleryButton() {\n      if (this.props.options.galleries) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showGallery,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-gallery' },\n          gettext(\"Pick avatar from gallery\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getAvatarPreview',\n    value: function getAvatarPreview() {\n      if (this.state.isLoading) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'avatar-preview preview-loading' },\n          _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '200' }),\n          _react2.default.createElement(_loader2.default, null)\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            { className: 'avatar-preview' },\n            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '200' })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-index' },\n        _react2.default.createElement(\n          'div',\n          { className: 'row' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-5' },\n            this.getAvatarPreview()\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-7' },\n            this.getGravatarButton(),\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.setGenerated,\n                disabled: this.state.isLoading,\n                className: 'btn-default btn-block btn-avatar-generate' },\n              gettext(\"Generate my individual avatar\")\n            ),\n            this.getCropButton(),\n            this.getUploadButton(),\n            this.getGalleryButton()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":84,\"../../services/snackbar\":92,\"../avatar\":47,\"../button\":49,\"../loader\":58,\"react\":\"react\"}],53:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChangeAvatarError = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('./index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _crop = require('./crop');\n\nvar _crop2 = _interopRequireDefault(_crop);\n\nvar _upload = require('./upload');\n\nvar _upload2 = _interopRequireDefault(_upload);\n\nvar _gallery = require('./gallery');\n\nvar _gallery2 = _interopRequireDefault(_gallery);\n\nvar _modalLoader = require('../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _users = require('../../reducers/users');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar ChangeAvatarError = exports.ChangeAvatarError = function (_React$Component) {\n  _inherits(ChangeAvatarError, _React$Component);\n\n  function ChangeAvatarError() {\n    _classCallCheck(this, ChangeAvatarError);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeAvatarError).apply(this, arguments));\n  }\n\n  _createClass(ChangeAvatarError, [{\n    key: 'getErrorReason',\n    value: function getErrorReason() {\n      if (this.props.reason) {\n        /* jshint ignore:start */\n        return _react2.default.createElement('p', { dangerouslySetInnerHTML: { __html: this.props.reason } });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body' },\n        _react2.default.createElement(\n          'div',\n          { className: 'message-icon' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'remove_circle_outline'\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'message-body' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.props.message\n          ),\n          this.getErrorReason()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeAvatarError;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this2, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this2 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.showError = function (error) {\n      _this2.setState({\n        error: error\n      });\n    }, _this2.showIndex = function () {\n      _this2.setState({\n        'component': _index2.default\n      });\n    }, _this2.showUpload = function () {\n      _this2.setState({\n        'component': _upload2.default\n      });\n    }, _this2.showCrop = function () {\n      _this2.setState({\n        'component': _crop2.default\n      });\n    }, _this2.showGallery = function () {\n      _this2.setState({\n        'component': _gallery2.default\n      });\n    }, _this2.completeFlow = function (avatarHash, options) {\n      _store2.default.dispatch((0, _users.updateAvatar)(_this2.props.user, avatarHash));\n\n      _this2.setState({\n        'component': _index2.default,\n        options: options\n      });\n    }, _temp), _possibleConstructorReturn(_this2, _ret);\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this3 = this;\n\n      _ajax2.default.get(this.props.user.api_url.avatar).then(function (options) {\n        _this3.setState({\n          'component': _index2.default,\n          'options': options,\n          'error': null\n        });\n      }, function (rejection) {\n        _this3.showError(rejection);\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getBody',\n\n    /* jshint ignore:end */\n\n    value: function getBody() {\n      if (this.state) {\n        if (this.state.error) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ChangeAvatarError, { message: this.state.error.detail,\n            reason: this.state.error.reason });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(this.state.component, { options: this.state.options,\n              user: this.props.user,\n              onComplete: this.completeFlow,\n              showError: this.showError,\n              showIndex: this.showIndex,\n              showCrop: this.showCrop,\n              showUpload: this.showUpload,\n              showGallery: this.showGallery });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state && this.state.error) {\n        return \"modal-dialog modal-message modal-change-avatar\";\n      } else {\n        return \"modal-dialog modal-change-avatar\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Change your avatar\")\n            )\n          ),\n          this.getBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(state) {\n  return {\n    'user': state.auth.user\n  };\n}\n\n},{\"../../reducers/users\":83,\"../../services/ajax\":84,\"../../services/store\":93,\"../modal-loader\":59,\"./crop\":50,\"./gallery\":51,\"./index\":52,\"./upload\":54,\"react\":\"react\"}],54:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _crop = require('./crop');\n\nvar _crop2 = _interopRequireDefault(_crop);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _fileSize = require('../../utils/file-size');\n\nvar _fileSize2 = _interopRequireDefault(_fileSize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.pickFile = function () {\n      document.getElementById('avatar-hidden-upload').click();\n    };\n\n    _this.uploadFile = function () {\n      var image = document.getElementById('avatar-hidden-upload').files[0];\n\n      var validationError = _this.validateFile(image);\n      if (validationError) {\n        _snackbar2.default.error(validationError);\n        return;\n      }\n\n      _this.setState({\n        image: image,\n        'preview': URL.createObjectURL(image),\n        'progress': 0\n      });\n\n      var data = new FormData();\n      data.append('avatar', 'upload');\n      data.append('image', image);\n\n      _ajax2.default.upload(_this.props.user.api_url.avatar, data, function (progress) {\n        _this.setState({\n          progress: progress\n        });\n      }).then(function (data) {\n        _this.setState({\n          'options': data.options,\n          'uploaded': data.detail\n        });\n        _snackbar2.default.info(gettext(\"Your image has been uploaded and you may now crop it.\"));\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this.setState({\n            'isLoading': false,\n            'image': null,\n            'progress': 0\n          });\n        } else {\n          _this.props.showError(rejection);\n        }\n      });\n    };\n\n    _this.state = {\n      'image': null,\n      'preview': null,\n      'progress': 0,\n      'uploaded': null\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'validateFile',\n    value: function validateFile(image) {\n      if (image.size > this.props.options.upload.limit) {\n        return interpolate(gettext(\"Selected file is too big. (%(filesize)s)\"), {\n          'filesize': (0, _fileSize2.default)(image.size)\n        }, true);\n      }\n\n      var invalidTypeMsg = gettext(\"Selected file type is not supported.\");\n      if (this.props.options.upload.allowed_mime_types.indexOf(image.type) === -1) {\n        return invalidTypeMsg;\n      }\n\n      var extensionFound = false;\n      var loweredFilename = image.name.toLowerCase();\n      this.props.options.upload.allowed_extensions.map(function (extension) {\n        if (loweredFilename.substr(extension.length * -1) === extension) {\n          extensionFound = true;\n        }\n      });\n\n      if (!extensionFound) {\n        return invalidTypeMsg;\n      }\n\n      return false;\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getUploadRequirements',\n\n    /* jshint ignore:end */\n\n    value: function getUploadRequirements(options) {\n      var extensions = options.allowed_extensions.map(function (extension) {\n        return extension.substr(1);\n      });\n\n      return interpolate(gettext(\"%(files)s files smaller than %(limit)s\"), {\n        'files': extensions.join(', '),\n        'limit': (0, _fileSize2.default)(options.limit)\n      }, true);\n    }\n  }, {\n    key: 'getUploadButton',\n    value: function getUploadButton() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-upload' },\n        _react2.default.createElement(\n          _button2.default,\n          { className: 'btn-pick-file',\n            onClick: this.pickFile },\n          _react2.default.createElement(\n            'div',\n            { className: 'material-icon' },\n            'input'\n          ),\n          gettext(\"Select file\")\n        ),\n        _react2.default.createElement(\n          'p',\n          { className: 'text-muted' },\n          this.getUploadRequirements(this.props.options.upload)\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getUploadProgressLabel',\n    value: function getUploadProgressLabel() {\n      return interpolate(gettext(\"%(progress)s % complete\"), {\n        'progress': this.state.progress\n      }, true);\n    }\n  }, {\n    key: 'getUploadProgress',\n    value: function getUploadProgress() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-upload' },\n        _react2.default.createElement(\n          'div',\n          { className: 'upload-progress' },\n          _react2.default.createElement('img', { src: this.state.preview }),\n          _react2.default.createElement(\n            'div',\n            { className: 'progress' },\n            _react2.default.createElement(\n              'div',\n              { className: 'progress-bar', role: 'progressbar',\n                'aria-valuenow': '{this.state.progress}',\n                'aria-valuemin': '0', 'aria-valuemax': '100',\n                style: { width: this.state.progress + '%' } },\n              _react2.default.createElement(\n                'span',\n                { className: 'sr-only' },\n                this.getUploadProgressLabel()\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderUpload',\n    value: function renderUpload() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement('input', { type: 'file',\n          id: 'avatar-hidden-upload',\n          className: 'hidden-file-upload',\n          onChange: this.uploadFile }),\n        this.state.image ? this.getUploadProgress() : this.getUploadButton(),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-6 col-md-offset-3' },\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.props.showIndex,\n                disabled: !!this.state.image,\n                className: 'btn-default btn-block' },\n              gettext(\"Cancel\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderCrop',\n    value: function renderCrop() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(_crop2.default, { options: this.state.options,\n        user: this.props.user,\n        upload: this.state.uploaded,\n        onComplete: this.props.onComplete,\n        showError: this.props.showError,\n        showIndex: this.props.showIndex });\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return this.state.uploaded ? this.renderCrop() : this.renderUpload();\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":84,\"../../services/snackbar\":92,\"../../utils/file-size\":97,\"../button\":49,\"./crop\":50,\"react\":\"react\"}],55:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'isValidated',\n    value: function isValidated() {\n      return typeof this.props.validation !== \"undefined\";\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      var className = 'form-group';\n      if (this.isValidated()) {\n        className += ' has-feedback';\n        if (this.props.validation === null) {\n          className += ' has-success';\n        } else {\n          className += ' has-error';\n        }\n      }\n      return className;\n    }\n  }, {\n    key: 'getFeedback',\n    value: function getFeedback() {\n      var _this2 = this;\n\n      if (this.props.validation) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'help-block errors' },\n          this.props.validation.map(function (error, i) {\n            return _react2.default.createElement(\n              'p',\n              { key: _this2.props.for + 'FeedbackItem' + i },\n              error\n            );\n          })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFeedbackIcon',\n    value: function getFeedbackIcon() {\n      if (this.isValidated()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'material-icon form-control-feedback',\n            'aria-hidden': 'true', key: this.props.for + 'FeedbackIcon' },\n          this.props.validation ? 'clear' : 'check'\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFeedbackDescription',\n    value: function getFeedbackDescription() {\n      if (this.isValidated()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { id: this.props.for + '_status', className: 'sr-only' },\n          this.props.validation ? gettext('(error)') : gettext('(success)')\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.helpText) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          { className: 'help-block' },\n          this.props.helpText\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'label',\n          { className: 'control-label ' + (this.props.labelClass || ''),\n            htmlFor: this.props.for || '' },\n          this.props.label + ':'\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.props.controlClass || '' },\n          this.props.children,\n          this.getFeedbackIcon(),\n          this.getFeedbackDescription(),\n          this.getFeedback(),\n          this.getHelpText(),\n          this.props.extra || null\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],56:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _validators = require('../utils/validators');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar validateRequired = (0, _validators.required)();\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.bindInput = function (name) {\n      return function (event) {\n        var newState = {};\n        newState[name] = event.target.value;\n\n        var formErrors = _this.state.errors || {};\n        formErrors[name] = _this.validateField(name, newState[name]);\n        newState.errors = formErrors;\n\n        _this.setState(newState);\n      };\n    }, _this.handleSubmit = function (event) {\n      // we don't reload page on submissions\n      event.preventDefault();\n      if (_this.state.isLoading) {\n        return;\n      }\n\n      if (_this.clean()) {\n        _this.setState({ isLoading: true });\n        var promise = _this.send();\n\n        if (promise) {\n          promise.then(function (success) {\n            _this.setState({ isLoading: false });\n            _this.handleSuccess(success);\n          }, function (rejection) {\n            _this.setState({ isLoading: false });\n            _this.handleError(rejection);\n          });\n        } else {\n          _this.setState({ isLoading: false });\n        }\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: 'validate',\n    value: function validate() {\n      var errors = {};\n      if (!this.state.validators) {\n        return errors;\n      }\n\n      var validators = {\n        required: this.state.validators.required || this.state.validators,\n        optional: this.state.validators.optional || {}\n      };\n\n      var validatedFields = [];\n\n      // add required fields to validation\n      for (var name in validators.required) {\n        if (validators.required.hasOwnProperty(name) && validators.required[name]) {\n          validatedFields.push(name);\n        }\n      }\n\n      // add optional fields to validation\n      for (var name in validators.optional) {\n        if (validators.optional.hasOwnProperty(name) && validators.optional[name]) {\n          validatedFields.push(name);\n        }\n      }\n\n      // validate fields values\n      for (var i in validatedFields) {\n        var name = validatedFields[i];\n        var fieldErrors = this.validateField(name, this.state[name]);\n\n        if (fieldErrors === null) {\n          errors[name] = null;\n        } else if (fieldErrors) {\n          errors[name] = fieldErrors;\n        }\n      }\n\n      return errors;\n    }\n  }, {\n    key: 'isValid',\n    value: function isValid() {\n      var errors = this.validate();\n      for (var field in errors) {\n        if (errors.hasOwnProperty(field)) {\n          if (errors[field] !== null) {\n            return false;\n          }\n        }\n      }\n\n      return true;\n    }\n  }, {\n    key: 'validateField',\n    value: function validateField(name, value) {\n      var errors = [];\n      if (!this.state.validators) {\n        return errors;\n      }\n\n      var validators = {\n        required: (this.state.validators.required || this.state.validators)[name],\n        optional: (this.state.validators.optional || {})[name]\n      };\n\n      var requiredError = validateRequired(value) || false;\n\n      if (validators.required) {\n        if (requiredError) {\n          errors = [requiredError];\n        } else {\n          for (var i in validators.required) {\n            var validationError = validators.required[i](value);\n            if (validationError) {\n              errors.push(validationError);\n            }\n          }\n        }\n\n        return errors.length ? errors : null;\n      } else if (requiredError === false && validators.optional) {\n        for (var i in validators.optional) {\n          var validationError = validators.optional[i](value);\n          if (validationError) {\n            errors.push(validationError);\n          }\n        }\n\n        return errors.length ? errors : null;\n      }\n\n      return false; // false === field wasn't validated\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'clean',\n    value: function clean() {\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return null;\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(success) {\n      return;\n    }\n  }, {\n    key: 'handleError',\n\n    /* jshint ignore:end */\n    value: function handleError(rejection) {\n      return;\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../utils/validators\":102,\"react\":\"react\"}],57:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'isActive',\n    value: function isActive() {\n      if (this.props.path) {\n        return document.location.pathname.indexOf(this.props.path) === 0;\n      } else {\n        return false;\n      }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.isActive()) {\n        return (this.props.className || '') + ' ' + (this.props.activeClassName || 'active');\n      } else {\n        return this.props.className || '';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'li',\n        { className: this.getClassName() },\n        this.props.children\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],58:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.props.className || \"loader\" },\n        _react2.default.createElement(\"div\", { className: \"loader-spinning-wheel\" })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],59:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-loader' },\n        _react2.default.createElement(_loader2.default, null)\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./loader\":58,\"react\":\"react\"}],60:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.UsernameHistory = exports.ChangeUsernameLoading = exports.NoChangesLeft = exports.ChangeUsername = undefined;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _loader = require('../loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory = require('../../reducers/username-history');\n\nvar _users = require('../../reducers/users');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _random = require('../../utils/random');\n\nvar random = _interopRequireWildcard(_random);\n\nvar _validators = require('../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar ChangeUsername = exports.ChangeUsername = function (_Form) {\n  _inherits(ChangeUsername, _Form);\n\n  function ChangeUsername(props) {\n    _classCallCheck(this, ChangeUsername);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeUsername).call(this, props));\n\n    _this.state = {\n      username: '',\n\n      validators: {\n        username: [validators.usernameContent(), validators.usernameMinLength({\n          username_length_min: props.options.length_min\n        }), validators.usernameMaxLength({\n          username_length_max: props.options.length_max\n        })]\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(ChangeUsername, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      var phrases = [];\n\n      if (this.props.options.changes_left > 0) {\n        var message = ngettext(\"You can change your username %(changes_left)s more time.\", \"You can change your username %(changes_left)s more times.\", this.props.options.changes_left);\n\n        phrases.push(interpolate(message, {\n          'changes_left': this.props.options.changes_left\n        }, true));\n      }\n\n      if (this.props.user.acl.name_changes_expire > 0) {\n        var message = ngettext(\"Used changes redeem after %(name_changes_expire)s day.\", \"Used changes redeem after %(name_changes_expire)s days.\", this.props.user.acl.name_changes_expire);\n\n        phrases.push(interpolate(message, {\n          'name_changes_expire': this.props.user.acl.name_changes_expire\n        }, true));\n      }\n\n      return phrases.length ? phrases.join(' ') : null;\n    }\n  }, {\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      if (errors.username) {\n        _snackbar2.default.error(errors.username[0]);\n        return false;\n      }if (this.state.username.trim() === this.props.user.username) {\n        _snackbar2.default.info(gettext(\"Your new username is same as current one.\"));\n        return false;\n      } else {\n        return true;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.username, {\n        'username': this.state.username\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(success) {\n      this.setState({\n        'username': ''\n      });\n\n      this.props.complete(success.username, success.slug, success.options);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      _snackbar2.default.apiError(rejection);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change username\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New username\"), 'for': 'id_username',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                helpText: this.getHelpText() },\n              _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('username'),\n                value: this.state.username })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change username\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeUsername;\n}(_form2.default);\n\nvar NoChangesLeft = exports.NoChangesLeft = function (_React$Component) {\n  _inherits(NoChangesLeft, _React$Component);\n\n  function NoChangesLeft() {\n    _classCallCheck(this, NoChangesLeft);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoChangesLeft).apply(this, arguments));\n  }\n\n  _createClass(NoChangesLeft, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.options.next_on) {\n        return interpolate(gettext(\"You will be able to change your username %(next_change)s.\"), { 'next_change': this.props.options.next_on.fromNow() }, true);\n      } else {\n        return gettext(\"You have used up available name changes.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel panel-default panel-form' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-heading' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'panel-title' },\n            gettext(\"Change username\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-body panel-message-body' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'info_outline'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              { className: 'lead' },\n              gettext(\"You can't change your username at the moment.\")\n            ),\n            _react2.default.createElement(\n              'p',\n              { className: 'help-block' },\n              this.getHelpText()\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return NoChangesLeft;\n}(_react2.default.Component);\n\nvar ChangeUsernameLoading = exports.ChangeUsernameLoading = function (_React$Component2) {\n  _inherits(ChangeUsernameLoading, _React$Component2);\n\n  function ChangeUsernameLoading() {\n    _classCallCheck(this, ChangeUsernameLoading);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeUsernameLoading).apply(this, arguments));\n  }\n\n  _createClass(ChangeUsernameLoading, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel panel-default panel-form' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-heading' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'panel-title' },\n            gettext(\"Change username\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-body panel-body-loading' },\n          _react2.default.createElement(_loader2.default, { className: 'loader loader-spaced' })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeUsernameLoading;\n}(_react2.default.Component);\n\nvar UsernameHistory = exports.UsernameHistory = function (_React$Component3) {\n  _inherits(UsernameHistory, _React$Component3);\n\n  function UsernameHistory() {\n    _classCallCheck(this, UsernameHistory);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UsernameHistory).apply(this, arguments));\n  }\n\n  _createClass(UsernameHistory, [{\n    key: 'renderUserAvatar',\n    value: function renderUserAvatar(item) {\n      if (item.changed_by) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: item.changed_by.absolute_url, className: 'user-avatar' },\n          _react2.default.createElement(_avatar2.default, { user: item.changed_by, size: '100' })\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'user-avatar' },\n            _react2.default.createElement(_avatar2.default, { size: '100' })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'renderUsername',\n    value: function renderUsername(item) {\n      if (item.changed_by) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: item.changed_by.absolute_url, className: 'item-title' },\n          item.changed_by.username\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'item-title' },\n            item.changed_by_username\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'renderHistory',\n    value: function renderHistory() {\n      var _this5 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-ready' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          this.props.changes.map(function (item) {\n            return _react2.default.createElement(\n              'li',\n              { className: 'list-group-item', key: item.id },\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-avatar' },\n                _this5.renderUserAvatar(item)\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-author' },\n                _this5.renderUsername(item)\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change' },\n                item.old_username,\n                _react2.default.createElement(\n                  'span',\n                  { className: 'material-icon' },\n                  'arrow_forward'\n                ),\n                item.new_username\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-date' },\n                _react2.default.createElement(\n                  'abbr',\n                  { title: item.changed_on.format('LLL') },\n                  item.changed_on.fromNow()\n                )\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderEmptyHistory',\n    value: function renderEmptyHistory() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-ready' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          _react2.default.createElement(\n            'li',\n            { className: 'list-group-item empty-message' },\n            gettext(\"No name changes have been recorded for your account.\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderHistoryPreview',\n    value: function renderHistoryPreview() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-preview' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          random.range(3, 5).map(function (i) {\n            return _react2.default.createElement(\n              'li',\n              { className: 'list-group-item', key: i },\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-avatar' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'user-avatar' },\n                  _react2.default.createElement(_avatar2.default, { size: '100' })\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-author' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 100) + \"px\" } },\n                  ' '\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                  ' '\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'material-icon' },\n                  'arrow_forward'\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                  ' '\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-date' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(50, 100) + \"px\" } },\n                  ' '\n                )\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      if (this.props.isLoaded) {\n        if (this.props.changes.length) {\n          return this.renderHistory();\n        } else {\n          return this.renderEmptyHistory();\n        }\n      } else {\n        return this.renderHistoryPreview();\n      }\n    }\n  }]);\n\n  return UsernameHistory;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component4) {\n  _inherits(_class, _React$Component4);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this6 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this6.onComplete = function (username, slug, options) {\n      _this6.setState({\n        options: options\n      });\n\n      _store2.default.dispatch((0, _usernameHistory.addNameChange)({ username: username, slug: slug }, _this6.props.user, _this6.props.user));\n      _store2.default.dispatch((0, _users.updateUsername)(_this6.props.user, username, slug));\n\n      _snackbar2.default.success(gettext(\"Your username has been changed successfully.\"));\n    };\n\n    _this6.state = {\n      isLoaded: false,\n      options: null\n    };\n    return _this6;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this7 = this;\n\n      _pageTitle2.default.set({\n        title: gettext(\"Change username\"),\n        parent: gettext(\"Change your options\")\n      });\n\n      Promise.all([_ajax2.default.get(this.props.user.api_url.username), _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), { user: this.props.user.id })]).then(function (data) {\n        _this7.setState({\n          isLoaded: true,\n          options: {\n            changes_left: data[0].changes_left,\n            length_min: data[0].length_min,\n            length_max: data[0].length_max,\n            next_on: data[0].next_on ? (0, _moment2.default)(data[0].next_on) : null\n          }\n        });\n\n        _store2.default.dispatch((0, _usernameHistory.dehydrate)(data[1].results));\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getChangeForm',\n\n    /* jshint ignore:end */\n\n    value: function getChangeForm() {\n      if (this.state.isLoaded) {\n        if (this.state.options.changes_left > 0) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ChangeUsername, { user: this.props.user,\n            options: this.state.options,\n            complete: this.onComplete });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(NoChangesLeft, { options: this.state.options });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ChangeUsernameLoading, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        this.getChangeForm(),\n        _react2.default.createElement(UsernameHistory, { isLoaded: this.state.isLoaded,\n          changes: this.props['username-history'] })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":78,\"../../reducers/username-history\":82,\"../../reducers/users\":83,\"../../services/ajax\":84,\"../../services/page-title\":91,\"../../services/snackbar\":92,\"../../services/store\":93,\"../../utils/random\":100,\"../../utils/validators\":102,\"../avatar\":47,\"../button\":49,\"../form\":56,\"../form-group\":55,\"../loader\":58,\"moment\":\"moment\",\"react\":\"react\"}],61:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _select = require('../select');\n\nvar _select2 = _interopRequireDefault(_select);\n\nvar _yesNoSwitch = require('../yes-no-switch');\n\nvar _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);\n\nvar _auth = require('../../reducers/auth');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'is_hiding_presence': props.user.is_hiding_presence,\n      'limits_private_thread_invites_to': props.user.limits_private_thread_invites_to,\n      'subscribe_to_started_threads': props.user.subscribe_to_started_threads,\n      'subscribe_to_replied_threads': props.user.subscribe_to_replied_threads,\n\n      'errors': {}\n    };\n\n    _this.privateThreadInvitesChoices = [{\n      'value': 0,\n      'icon': 'help_outline',\n      'label': gettext('Everybody')\n    }, {\n      'value': 1,\n      'icon': 'done_all',\n      'label': gettext('Users I follow')\n    }, {\n      'value': 2,\n      'icon': 'highlight_off',\n      'label': gettext('Nobody')\n    }];\n\n    _this.subscribeToChoices = [{\n      'value': 0,\n      'icon': 'bookmark_border',\n      'label': gettext('No')\n    }, {\n      'value': 1,\n      'icon': 'bookmark',\n      'label': gettext('Bookmark')\n    }, {\n      'value': 2,\n      'icon': 'mail',\n      'label': gettext('Bookmark with e-mail notification')\n    }];\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.options, {\n        'is_hiding_presence': this.state.is_hiding_presence,\n        'limits_private_thread_invites_to': this.state.limits_private_thread_invites_to,\n        'subscribe_to_started_threads': this.state.subscribe_to_started_threads,\n        'subscribe_to_replied_threads': this.state.subscribe_to_replied_threads\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      _store2.default.dispatch((0, _auth.patchUser)({\n        'is_hiding_presence': this.state.is_hiding_presence,\n        'limits_private_thread_invites_to': this.state.limits_private_thread_invites_to,\n        'subscribe_to_started_threads': this.state.subscribe_to_started_threads,\n        'subscribe_to_replied_threads': this.state.subscribe_to_replied_threads\n      }));\n      _snackbar2.default.success(gettext(\"Your forum options have been changed.\"));\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        _snackbar2.default.error(gettext(\"Please reload page and try again.\"));\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Forum options\"),\n        parent: gettext(\"Change your options\")\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change forum options\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              'fieldset',\n              null,\n              _react2.default.createElement(\n                'legend',\n                null,\n                gettext(\"Privacy settings\")\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Hide my presence\"),\n                  helpText: gettext(\"If you hide your presence, only members with permission to see hidden users will see when you are online.\"),\n                  'for': 'id_is_hiding_presence',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_hiding_presence',\n                  disabled: this.state.isLoading,\n                  iconOn: 'visibility',\n                  iconOff: 'visibility_off',\n                  labelOn: gettext(\"Show my presence to other users\"),\n                  labelOff: gettext(\"Hide my presence from other users\"),\n                  onChange: this.bindInput('is_hiding_presence'),\n                  value: this.state.is_hiding_presence })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Private thread invitations\"),\n                  'for': 'id_limits_private_thread_invites_to',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_limits_private_thread_invites_to',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('limits_private_thread_invites_to'),\n                  value: this.state.limits_private_thread_invites_to,\n                  choices: this.privateThreadInvitesChoices })\n              )\n            ),\n            _react2.default.createElement(\n              'fieldset',\n              null,\n              _react2.default.createElement(\n                'legend',\n                null,\n                gettext(\"Automatic subscriptions\")\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Threads I start\"),\n                  'for': 'id_subscribe_to_started_threads',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_started_threads',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('subscribe_to_started_threads'),\n                  value: this.state.subscribe_to_started_threads,\n                  choices: this.subscribeToChoices })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Threads I reply to\"),\n                  'for': 'id_subscribe_to_replied_threads',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_replied_threads',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('subscribe_to_replied_threads'),\n                  value: this.state.subscribe_to_replied_threads,\n                  choices: this.subscribeToChoices })\n              )\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Save changes\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../reducers/auth\":79,\"../../services/ajax\":84,\"../../services/page-title\":91,\"../../services/snackbar\":92,\"../../services/store\":93,\"../button\":49,\"../form\":56,\"../form-group\":55,\"../select\":71,\"../yes-no-switch\":77,\"react\":\"react\"}],62:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.SideNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n//jshint ignore:line\n\n//jshint ignore:line\n\nvar SideNav = exports.SideNav = function (_React$Component) {\n  _inherits(SideNav, _React$Component);\n\n  function SideNav() {\n    _classCallCheck(this, SideNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));\n  }\n\n  _createClass(SideNav, [{\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'list-group nav-side' },\n        this.props.options.map(function (option) {\n          return _react2.default.createElement(\n            _reactRouter.Link,\n            { to: _this2.props.baseUrl + option.component + '/',\n              className: 'list-group-item',\n              activeClassName: 'active',\n              key: option.component },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              option.icon\n            ),\n            option.name\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return SideNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_React$Component2) {\n  _inherits(CompactNav, _React$Component2);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'render',\n    value: function render() {\n      var _this4 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        this.props.options.map(function (option) {\n          return _react2.default.createElement(\n            _li2.default,\n            { path: _this4.props.baseUrl + option.component + '/',\n              key: option.component },\n            _react2.default.createElement(\n              _reactRouter.Link,\n              { to: _this4.props.baseUrl + option.component + '/' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                option.icon\n              ),\n              option.name\n            )\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(_react2.default.Component);\n\n},{\"../../index\":78,\"../li\":57,\"react\":\"react\",\"react-router\":\"react-router\"}],63:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Options = undefined;\nexports.select = select;\nexports.paths = paths;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _navs = require('./navs');\n\nvar _forumOptions = require('./forum-options');\n\nvar _forumOptions2 = _interopRequireDefault(_forumOptions);\n\nvar _changeUsername = require('./change-username');\n\nvar _changeUsername2 = _interopRequireDefault(_changeUsername);\n\nvar _signInCredentials = require('./sign-in-credentials');\n\nvar _signInCredentials2 = _interopRequireDefault(_signInCredentials);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\nvar Options = exports.Options = function (_React$Component) {\n  _inherits(Options, _React$Component);\n\n  function Options(props) {\n    _classCallCheck(this, Options);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(Options).call(this, props));\n\n    _this.toggleNav = function () {\n      if (_this.state.dropdown) {\n        _this.setState({\n          dropdown: false\n        });\n      } else {\n        _this.setState({\n          dropdown: true\n        });\n      }\n    };\n\n    _this.state = {\n      dropdown: false\n    };\n    return _this;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(Options, [{\n    key: 'getToggleNavClassName',\n\n    /* jshint ignore:end */\n\n    value: function getToggleNavClassName() {\n      if (this.state.dropdown) {\n        return 'btn btn-default btn-icon open';\n      } else {\n        return 'btn btn-default btn-icon';\n      }\n    }\n  }, {\n    key: 'getCompactNavClassName',\n    value: function getCompactNavClassName() {\n      if (this.state.dropdown) {\n        return 'compact-nav open';\n      } else {\n        return 'compact-nav';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'page-header' },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            _react2.default.createElement(\n              'h1',\n              { className: 'pull-left' },\n              gettext(\"Change your options\")\n            ),\n            _react2.default.createElement(\n              'button',\n              { className: 'btn btn-default btn-icon btn-dropdown-toggle hidden-md hidden-lg',\n                type: 'button',\n                onClick: this.toggleNav,\n                'aria-haspopup': 'true',\n                'aria-expanded': this.state.dropdown ? 'true' : 'false' },\n              _react2.default.createElement(\n                'i',\n                { className: 'material-icon' },\n                'menu'\n              )\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          _react2.default.createElement(_navs.CompactNav, { options: _index2.default.get('USER_OPTIONS'),\n            baseUrl: _index2.default.get('USERCP_URL') })\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-3 hidden-xs hidden-sm' },\n              _react2.default.createElement(_navs.SideNav, { options: _index2.default.get('USER_OPTIONS'),\n                baseUrl: _index2.default.get('USERCP_URL') })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-9' },\n              this.props.children\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Options;\n}(_react2.default.Component);\n\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user,\n    'username-history': store['username-history']\n  };\n}\n\nfunction paths() {\n  return [{\n    path: _index2.default.get('USERCP_URL') + 'forum-options/',\n    component: (0, _reactRedux.connect)(select)(_forumOptions2.default)\n  }, {\n    path: _index2.default.get('USERCP_URL') + 'change-username/',\n    component: (0, _reactRedux.connect)(select)(_changeUsername2.default)\n  }, {\n    path: _index2.default.get('USERCP_URL') + 'sign-in-credentials/',\n    component: (0, _reactRedux.connect)(select)(_signInCredentials2.default)\n  }];\n}\n\n},{\"../../index\":78,\"./change-username\":60,\"./forum-options\":61,\"./navs\":62,\"./sign-in-credentials\":64,\"react\":\"react\",\"react-redux\":\"react-redux\"}],64:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChangePassword = exports.ChangeEmail = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar ChangeEmail = exports.ChangeEmail = function (_Form) {\n  _inherits(ChangeEmail, _Form);\n\n  function ChangeEmail(props) {\n    _classCallCheck(this, ChangeEmail);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeEmail).call(this, props));\n\n    _this.state = {\n      new_email: '',\n      password: '',\n\n      validators: {\n        new_email: [validators.email()],\n        password: []\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(ChangeEmail, [{\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      var lengths = [this.state.new_email.trim().length, this.state.password.trim().length];\n\n      if (lengths.indexOf(0) !== -1) {\n        _snackbar2.default.error(gettext(\"Fill out all fields.\"));\n        return false;\n      }\n\n      if (errors.new_email) {\n        _snackbar2.default.error(errors.new_email[0]);\n        return false;\n      }\n\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.change_email, {\n        new_email: this.state.new_email,\n        password: this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(response) {\n      this.setState({\n        new_email: '',\n        password: ''\n      });\n\n      _snackbar2.default.success(response.detail);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.new_email) {\n          _snackbar2.default.error(rejection.new_email);\n        } else {\n          _snackbar2.default.error(rejection.password);\n        }\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change e-mail address\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New e-mail\"), 'for': 'id_new_email',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'text', id: 'id_new_email', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('new_email'),\n                value: this.state.new_email })\n            ),\n            _react2.default.createElement('hr', null),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Your current password\"), 'for': 'id_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change e-mail\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeEmail;\n}(_form2.default);\n\nvar ChangePassword = exports.ChangePassword = function (_Form2) {\n  _inherits(ChangePassword, _Form2);\n\n  function ChangePassword(props) {\n    _classCallCheck(this, ChangePassword);\n\n    var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(ChangePassword).call(this, props));\n\n    _this2.state = {\n      new_password: '',\n      repeat_password: '',\n      password: '',\n\n      validators: {\n        new_password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],\n        repeat_password: [],\n        password: []\n      },\n\n      isLoading: false\n    };\n    return _this2;\n  }\n\n  _createClass(ChangePassword, [{\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      var lengths = [this.state.new_password.trim().length, this.state.repeat_password.trim().length, this.state.password.trim().length];\n\n      if (lengths.indexOf(0) !== -1) {\n        _snackbar2.default.error(gettext(\"Fill out all fields.\"));\n        return false;\n      }\n\n      if (errors.new_password) {\n        _snackbar2.default.error(errors.new_password[0]);\n        return false;\n      }\n\n      if (this.state.new_password.trim() !== this.state.repeat_password.trim()) {\n        _snackbar2.default.error(gettext(\"New passwords are different.\"));\n        return false;\n      }\n\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.change_password, {\n        new_password: this.state.new_password,\n        password: this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(response) {\n      this.setState({\n        new_password: '',\n        repeat_password: '',\n        password: ''\n      });\n\n      _snackbar2.default.success(response.detail);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.new_password) {\n          _snackbar2.default.error(rejection.new_password);\n        } else {\n          _snackbar2.default.error(rejection.password);\n        }\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change password\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New password\"), 'for': 'id_new_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_new_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('new_password'),\n                value: this.state.new_password })\n            ),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Repeat password\"), 'for': 'id_repeat_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_repeat_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('repeat_password'),\n                value: this.state.repeat_password })\n            ),\n            _react2.default.createElement('hr', null),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Your current password\"), 'for': 'id_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change password\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangePassword;\n}(_form2.default);\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Change email or password\"),\n        parent: gettext(\"Change your options\")\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(ChangeEmail, { user: this.props.user }),\n        _react2.default.createElement(ChangePassword, { user: this.props.user }),\n        _react2.default.createElement(\n          'p',\n          { className: 'message-line' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'warning'\n          ),\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('FORGOTTEN_PASSWORD_URL') },\n            gettext(\"Change forgotten password\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":78,\"../../services/ajax\":84,\"../../services/page-title\":91,\"../../services/snackbar\":92,\"../../utils/validators\":102,\"../button\":49,\"../form\":56,\"../form-group\":55,\"react\":\"react\"}],65:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LABELS = exports.STYLES = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _zxcvbn = require('../services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar STYLES = exports.STYLES = ['progress-bar-danger', 'progress-bar-warning', 'progress-bar-warning', 'progress-bar-primary', 'progress-bar-success'];\n\nvar LABELS = exports.LABELS = [gettext(\"Entered password is very weak.\"), gettext(\"Entered password is weak.\"), gettext(\"Entered password is average.\"), gettext(\"Entered password is strong.\"), gettext(\"Entered password is very strong.\")];\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this._score = 0;\n    _this._password = null;\n    _this._inputs = [];\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getScore',\n    value: function getScore(password, inputs) {\n      var _this2 = this;\n\n      var cacheStale = false;\n\n      if (password.trim() !== this._password) {\n        cacheStale = true;\n      }\n\n      if (inputs.length !== this._inputs.length) {\n        cacheStale = true;\n      } else {\n        inputs.map(function (value, i) {\n          if (value.trim() !== _this2._inputs[i]) {\n            cacheStale = true;\n          }\n        });\n      }\n\n      if (cacheStale) {\n        this._score = _zxcvbn2.default.scorePassword(password, inputs);\n        this._password = password.trim();\n        this._inputs = inputs.map(function (value) {\n          return value.trim();\n        });\n      }\n\n      return this._score;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      var score = this.getScore(this.props.password, this.props.inputs);\n\n      return _react2.default.createElement(\n        'div',\n        { className: 'help-block password-strength' },\n        _react2.default.createElement(\n          'div',\n          { className: 'progress' },\n          _react2.default.createElement(\n            'div',\n            { className: \"progress-bar \" + STYLES[score],\n              style: { width: 20 + 20 * score + '%' },\n              role: 'progress-bar',\n              'aria-valuenow': score,\n              'aria-valuemin': '0',\n              'aria-valuemax': '4' },\n            _react2.default.createElement(\n              'span',\n              { className: 'sr-only' },\n              LABELS[score]\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'p',\n          { className: 'text-small' },\n          LABELS[score]\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/zxcvbn\":94,\"react\":\"react\"}],66:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _register = require('./register.js');\n\nvar _register2 = _interopRequireDefault(_register);\n\nvar _captcha = require('../services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _zxcvbn = require('../services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.showRegisterModal = function () {\n      if (misago.get('SETTINGS').account_activation === 'closed') {\n        _snackbar2.default.info(gettext(\"New registrations are currently disabled.\"));\n      } else if (_this.state.isLoaded) {\n        _modal2.default.show(_register2.default);\n      } else {\n        _this.setState({\n          'isLoading': true\n        });\n\n        Promise.all([_captcha2.default.load(), _zxcvbn2.default.load()]).then(function () {\n          if (!_this.state.isLoaded) {\n            _this.setState({\n              'isLoading': false,\n              'isLoaded': false\n            });\n          }\n\n          _modal2.default.show(_register2.default);\n        });\n      }\n    };\n\n    _this.state = {\n      'isLoading': false,\n      'isLoaded': false\n    };\n    return _this;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getClassName',\n\n    /* jshint ignore:end */\n\n    value: function getClassName() {\n      return this.props.className + (this.state.isLoading ? ' btn-loading' : '');\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showRegisterModal,\n          className: 'btn ' + this.getClassName(),\n          disabled: this.state.isLoaded },\n        gettext(\"Register\"),\n        this.state.isLoading ? _react2.default.createElement(_loader2.default, null) : null\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/captcha\":86,\"../services/modal\":90,\"../services/snackbar\":92,\"../services/zxcvbn\":94,\"./loader\":58,\"./register.js\":67,\"react\":\"react\"}],67:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.RegisterComplete = exports.RegisterForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('./form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _passwordStrength = require('./password-strength');\n\nvar _passwordStrength2 = _interopRequireDefault(_passwordStrength);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _auth = require('../services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _captcha = require('../services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar RegisterForm = exports.RegisterForm = function (_Form) {\n  _inherits(RegisterForm, _Form);\n\n  function RegisterForm(props) {\n    _classCallCheck(this, RegisterForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'username': '',\n      'email': '',\n      'password': '',\n      'captcha': '',\n\n      'validators': {\n        'username': [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))],\n        'email': [validators.email()],\n        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))],\n        'captcha': _captcha2.default.validator()\n      },\n\n      'errors': {}\n    };\n    return _this;\n  }\n\n  _createClass(RegisterForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Form contains errors.\"));\n        this.setState({\n          'errors': this.validate()\n        });\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('USERS_API'), {\n        'username': this.state.username,\n        'email': this.state.email,\n        'password': this.state.password,\n        'captcha': this.state.captcha\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        this.setState({\n          'errors': Object.assign({}, this.state.errors, rejection)\n        });\n        _snackbar2.default.error(gettext(\"Form contains errors.\"));\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n        _modal2.default.hide();\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'getLegalFootNote',\n    value: function getLegalFootNote() {\n      if (_index2.default.get('TERMS_OF_SERVICE_URL')) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: _index2.default.get('TERMS_OF_SERVICE_URL'),\n            target: '_blank' },\n          gettext(\"By registering you agree to site's terms and conditions.\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-register', role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Register\")\n            )\n          ),\n          _react2.default.createElement(\n            'form',\n            { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n            _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n            _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-body' },\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Username\"), 'for': 'id_username',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.username },\n                _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n                  'aria-describedby': 'id_username_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('username'),\n                  value: this.state.username })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"E-mail\"), 'for': 'id_email',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.email },\n                _react2.default.createElement('input', { type: 'text', id: 'id_email', className: 'form-control',\n                  'aria-describedby': 'id_email_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('email'),\n                  value: this.state.email })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Password\"), 'for': 'id_password',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.password,\n                  extra: _react2.default.createElement(_passwordStrength2.default, { password: this.state.password,\n                    inputs: [this.state.username, this.state.email] }) },\n                _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                  'aria-describedby': 'id_password_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('password'),\n                  value: this.state.password })\n              ),\n              _captcha2.default.component({\n                form: this,\n                labelClass: \"col-sm-4\",\n                controlClass: \"col-sm-8\"\n              })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-footer' },\n              this.getLegalFootNote(),\n              _react2.default.createElement(\n                _button2.default,\n                { className: 'btn-primary', loading: this.state.isLoading },\n                gettext(\"Register account\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RegisterForm;\n}(_form2.default);\n\nvar RegisterComplete = exports.RegisterComplete = function (_React$Component) {\n  _inherits(RegisterComplete, _React$Component);\n\n  function RegisterComplete() {\n    _classCallCheck(this, RegisterComplete);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterComplete).apply(this, arguments));\n  }\n\n  _createClass(RegisterComplete, [{\n    key: 'getLead',\n    value: function getLead() {\n      if (this.props.activation === 'user') {\n        return gettext(\"%(username)s, your account has been created but you need to activate it before you will be able to sign in.\");\n      } else if (this.props.activation === 'admin') {\n        return gettext(\"%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.\");\n      }\n    }\n  }, {\n    key: 'getSubscript',\n    value: function getSubscript() {\n      if (this.props.activation === 'user') {\n        return gettext(\"We have sent an e-mail to %(email)s with link that you have to click to activate your account.\");\n      } else if (this.props.activation === 'admin') {\n        return gettext(\"We will send an e-mail to %(email)s when this takes place.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-message modal-register',\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Registration complete\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-body' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'info_outline'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                interpolate(this.getLead(), { 'username': this.props.username }, true)\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                interpolate(this.getSubscript(), { 'email': this.props.email }, true)\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RegisterComplete;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this3.completeRegistration = function (apiResponse) {\n      if (apiResponse.activation === 'active') {\n        _modal2.default.hide();\n        _auth2.default.signIn(apiResponse);\n      } else {\n        _this3.setState({\n          'complete': apiResponse\n        });\n      }\n    };\n\n    _this3.state = {\n      'complete': false\n    };\n    return _this3;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(RegisterComplete, { activation: this.state.complete.activation,\n          username: this.state.complete.username,\n          email: this.state.complete.email });\n      } else {\n        return _react2.default.createElement(RegisterForm, { callback: this.completeRegistration });\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":78,\"../services/ajax\":84,\"../services/auth\":85,\"../services/captcha\":86,\"../services/modal\":90,\"../services/snackbar\":92,\"../utils/banned-page\":95,\"../utils/validators\":102,\"./button\":49,\"./form\":56,\"./form-group\":55,\"./password-strength\":65,\"react\":\"react\"}],68:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LinkSent = exports.RequestLinkForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar RequestLinkForm = exports.RequestLinkForm = function (_Form) {\n  _inherits(RequestLinkForm, _Form);\n\n  function RequestLinkForm(props) {\n    _classCallCheck(this, RequestLinkForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestLinkForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'email': '',\n\n      'validators': {\n        'email': [validators.email()]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(RequestLinkForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Enter a valid email address.\"));\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('SEND_ACTIVATION_API'), {\n        'email': this.state.email\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (['already_active', 'inactive_admin'].indexOf(rejection.code) > -1) {\n        _snackbar2.default.info(rejection.detail);\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-activation-link' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'text', className: 'form-control',\n                placeholder: gettext(\"Your e-mail address\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('email'),\n                value: this.state.email })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Send link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RequestLinkForm;\n}(_form2.default);\n\nvar LinkSent = exports.LinkSent = function (_React$Component) {\n  _inherits(LinkSent, _React$Component);\n\n  function LinkSent() {\n    _classCallCheck(this, LinkSent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));\n  }\n\n  _createClass(LinkSent, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"Activation link was sent to %(email)s\"), {\n        email: this.props.user.email\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-activation-link well-done' },\n        _react2.default.createElement(\n          'div',\n          { className: 'done-message' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'check'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              null,\n              this.getMessage()\n            )\n          ),\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-primary btn-block',\n              onClick: this.props.callback },\n            gettext(\"Request another link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return LinkSent;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this3.complete = function (apiResponse) {\n      _this3.setState({\n        complete: apiResponse\n      });\n    };\n\n    _this3.reset = function () {\n      _this3.setState({\n        complete: false\n      });\n    };\n\n    _this3.state = {\n      complete: false\n    };\n    return _this3;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });\n      } else {\n        return _react2.default.createElement(RequestLinkForm, { callback: this.complete });\n      };\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":78,\"../services/ajax\":84,\"../services/snackbar\":92,\"../utils/banned-page\":95,\"../utils/validators\":102,\"./button\":49,\"./form\":56,\"react\":\"react\"}],69:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AccountInactivePage = exports.LinkSent = exports.RequestResetForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar RequestResetForm = exports.RequestResetForm = function (_Form) {\n  _inherits(RequestResetForm, _Form);\n\n  function RequestResetForm(props) {\n    _classCallCheck(this, RequestResetForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestResetForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'email': '',\n\n      'validators': {\n        'email': [validators.email()]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(RequestResetForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Enter a valid email address.\"));\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('SEND_PASSWORD_RESET_API'), {\n        'email': this.state.email\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (['inactive_user', 'inactive_admin'].indexOf(rejection.code) > -1) {\n        this.props.showInactivePage(rejection);\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-password-reset' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'text', className: 'form-control',\n                placeholder: gettext(\"Your e-mail address\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('email'),\n                value: this.state.email })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Send link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RequestResetForm;\n}(_form2.default);\n\nvar LinkSent = exports.LinkSent = function (_React$Component) {\n  _inherits(LinkSent, _React$Component);\n\n  function LinkSent() {\n    _classCallCheck(this, LinkSent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));\n  }\n\n  _createClass(LinkSent, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"Reset password link was sent to %(email)s\"), {\n        email: this.props.user.email\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-password-reset well-done' },\n        _react2.default.createElement(\n          'div',\n          { className: 'done-message' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'check'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              null,\n              this.getMessage()\n            )\n          ),\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-primary btn-block',\n              onClick: this.props.callback },\n            gettext(\"Request another link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return LinkSent;\n}(_react2.default.Component);\n\nvar AccountInactivePage = exports.AccountInactivePage = function (_React$Component2) {\n  _inherits(AccountInactivePage, _React$Component2);\n\n  function AccountInactivePage() {\n    _classCallCheck(this, AccountInactivePage);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(AccountInactivePage).apply(this, arguments));\n  }\n\n  _createClass(AccountInactivePage, [{\n    key: 'getActivateButton',\n    value: function getActivateButton() {\n      if (this.props.activation === 'inactive_user') {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('REQUEST_ACTIVATION_URL') },\n            gettext(\"Activate your account.\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-message page-message-info page-forgotten-password-inactive' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'info_outline'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                gettext(\"Your account is inactive.\")\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                this.props.message\n              ),\n              this.getActivateButton()\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return AccountInactivePage;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component3) {\n  _inherits(_class, _React$Component3);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this4.complete = function (apiResponse) {\n      _this4.setState({\n        complete: apiResponse\n      });\n    };\n\n    _this4.reset = function () {\n      _this4.setState({\n        complete: false\n      });\n    };\n\n    _this4.state = {\n      complete: false\n    };\n    return _this4;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'showInactivePage',\n    value: function showInactivePage(apiResponse) {\n      _reactDom2.default.render(_react2.default.createElement(AccountInactivePage, { activation: apiResponse.code,\n        message: apiResponse.detail }), document.getElementById('page-mount'));\n    }\n    /* jshint ignore:end */\n\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });\n      } else {\n        return _react2.default.createElement(RequestResetForm, { callback: this.complete,\n          showInactivePage: this.showInactivePage });\n      };\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":78,\"../services/ajax\":84,\"../services/snackbar\":92,\"../utils/banned-page\":95,\"../utils/validators\":102,\"./button\":49,\"./form\":56,\"react\":\"react\",\"react-dom\":\"react-dom\"}],70:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PasswordChangedPage = exports.ResetPasswordForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _signIn = require('./sign-in.js');\n\nvar _signIn2 = _interopRequireDefault(_signIn);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _auth = require('../services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar ResetPasswordForm = exports.ResetPasswordForm = function (_Form) {\n  _inherits(ResetPasswordForm, _Form);\n\n  function ResetPasswordForm(props) {\n    _classCallCheck(this, ResetPasswordForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ResetPasswordForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'password': '',\n\n      'validators': {\n        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(ResetPasswordForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        if (this.state.password.trim().length) {\n          _snackbar2.default.error(this.state.errors.password[0]);\n        } else {\n          _snackbar2.default.error(gettext(\"Enter new password.\"));\n        }\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('CHANGE_PASSWORD_API'), {\n        'password': this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-reset-password' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'password', className: 'form-control',\n                placeholder: gettext(\"Enter new password\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Change password\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ResetPasswordForm;\n}(_form2.default);\n\nvar PasswordChangedPage = exports.PasswordChangedPage = function (_React$Component) {\n  _inherits(PasswordChangedPage, _React$Component);\n\n  function PasswordChangedPage() {\n    _classCallCheck(this, PasswordChangedPage);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(PasswordChangedPage).apply(this, arguments));\n  }\n\n  _createClass(PasswordChangedPage, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"%(username)s, your password has been changed successfully.\"), {\n        username: this.props.user.username\n      }, true);\n    }\n  }, {\n    key: 'showSignIn',\n    value: function showSignIn() {\n      _modal2.default.show(_signIn2.default);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-message page-message-success page-forgotten-password-changed' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'check'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                this.getMessage()\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                gettext(\"You will have to sign in using new password before continuing.\")\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                _react2.default.createElement(\n                  'button',\n                  { type: 'button', className: 'btn btn-primary', onClick: this.showSignIn },\n                  gettext(\"Sign in\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return PasswordChangedPage;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this3, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this3 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this3), _this3.complete = function (apiResponse) {\n      _auth2.default.softSignOut();\n\n      // nuke \"redirect_to\" field so we don't end\n      // coming back to error page after sign in\n      $('#hidden-login-form input[name=\"redirect_to\"]').remove();\n\n      _reactDom2.default.render(_react2.default.createElement(PasswordChangedPage, { user: apiResponse }), document.getElementById('page-mount'));\n    }, _temp), _possibleConstructorReturn(_this3, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(ResetPasswordForm, { callback: this.complete });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":78,\"../services/ajax\":84,\"../services/auth\":85,\"../services/modal\":90,\"../services/snackbar\":92,\"../utils/banned-page\":95,\"../utils/validators\":102,\"./button\":49,\"./form\":56,\"./sign-in.js\":72,\"react\":\"react\",\"react-dom\":\"react-dom\"}],71:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.change = function (value) {\n      return function () {\n        _this.props.onChange({\n          target: {\n            value: value\n          }\n        });\n      };\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: \"getChoice\",\n    value: function getChoice() {\n      var _this2 = this;\n\n      var choice = null;\n      this.props.choices.map(function (item) {\n        if (item.value === _this2.props.value) {\n          choice = item;\n        }\n      });\n      return choice;\n    }\n  }, {\n    key: \"getIcon\",\n    value: function getIcon() {\n      return this.getChoice().icon;\n    }\n  }, {\n    key: \"getLabel\",\n    value: function getLabel() {\n      return this.getChoice().label;\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: \"render\",\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      var _this3 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: \"btn-group btn-select-group\" },\n        _react2.default.createElement(\n          \"button\",\n          { type: \"button\",\n            className: \"btn btn-select dropdown-toggle\",\n            id: this.props.id || null,\n            \"data-toggle\": \"dropdown\",\n            \"aria-haspopup\": \"true\",\n            \"aria-expanded\": \"false\",\n            \"aria-describedby\": this.props['aria-describedby'] || null,\n            disabled: this.props.disabled || false },\n          _react2.default.createElement(\n            \"span\",\n            { className: \"material-icon\" },\n            this.getIcon()\n          ),\n          this.getLabel()\n        ),\n        _react2.default.createElement(\n          \"ul\",\n          { className: \"dropdown-menu\" },\n          this.props.choices.map(function (item, i) {\n            return _react2.default.createElement(\n              \"li\",\n              { key: i },\n              _react2.default.createElement(\n                \"button\",\n                { type: \"button\", className: \"btn-link\",\n                  onClick: _this3.change(item.value) },\n                _react2.default.createElement(\n                  \"span\",\n                  { className: \"material-icon\" },\n                  item.icon\n                ),\n                item.label\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],72:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n      'showActivation': false,\n\n      'username': '',\n      'password': '',\n\n      'validators': {\n        'username': [],\n        'password': []\n      }\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'clean',\n    value: function clean() {\n      if (!this.isValid()) {\n        _snackbar2.default.error(gettext(\"Fill out both fields.\"));\n        return false;\n      } else {\n        return true;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('AUTH_API'), {\n        'username': this.state.username,\n        'password': this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      var form = $('#hidden-login-form');\n\n      form.append('<input type=\"text\" name=\"username\" />');\n      form.append('<input type=\"password\" name=\"password\" />');\n\n      // fill out form with user credentials and submit it, this will tell\n      // Misago to redirect user back to right page, and will trigger browser's\n      // key ring feature\n      form.find('input[type=\"hidden\"]').val(_ajax2.default.getCsrfToken());\n      form.find('input[name=\"redirect_to\"]').val(window.location.pathname);\n      form.find('input[name=\"username\"]').val(this.state.username);\n      form.find('input[name=\"password\"]').val(this.state.password);\n      form.submit();\n\n      // keep form loading\n      this.setState({\n        'isLoading': true\n      });\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.code === 'inactive_admin') {\n          _snackbar2.default.info(rejection.detail);\n        } else if (rejection.code === 'inactive_user') {\n          _snackbar2.default.info(rejection.detail);\n          this.setState({\n            'showActivation': true\n          });\n        } else if (rejection.code === 'banned') {\n          (0, _bannedPage2.default)(rejection.detail);\n          _modal2.default.hide();\n        } else {\n          _snackbar2.default.error(rejection.detail);\n        }\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n        _modal2.default.hide();\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'getActivationButton',\n    value: function getActivationButton() {\n      if (this.state.showActivation) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: _index2.default.get('REQUEST_ACTIVATION_URL'),\n            className: 'btn btn-success btn-block' },\n          gettext(\"Activate account\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-sm modal-sign-in',\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Sign in\")\n            )\n          ),\n          _react2.default.createElement(\n            'form',\n            { onSubmit: this.handleSubmit },\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-body' },\n              _react2.default.createElement(\n                'div',\n                { className: 'form-group' },\n                _react2.default.createElement(\n                  'div',\n                  { className: 'control-input' },\n                  _react2.default.createElement('input', { id: 'id_username', className: 'form-control', type: 'text',\n                    disabled: this.state.isLoading,\n                    placeholder: gettext(\"Username or e-mail\"),\n                    onChange: this.bindInput('username'),\n                    value: this.state.username })\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'form-group' },\n                _react2.default.createElement(\n                  'div',\n                  { className: 'control-input' },\n                  _react2.default.createElement('input', { id: 'id_password', className: 'form-control', type: 'password',\n                    disabled: this.state.isLoading,\n                    placeholder: gettext(\"Password\"),\n                    onChange: this.bindInput('password'),\n                    value: this.state.password })\n                )\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-footer' },\n              this.getActivationButton(),\n              _react2.default.createElement(\n                _button2.default,\n                { className: 'btn-primary btn-block',\n                  loading: this.state.isLoading },\n                gettext(\"Sign in\")\n              ),\n              _react2.default.createElement(\n                'a',\n                { href: _index2.default.get('FORGOTTEN_PASSWORD_URL'),\n                  className: 'btn btn-default btn-block' },\n                gettext(\"Forgot password?\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../index\":78,\"../services/ajax\":84,\"../services/modal\":90,\"../services/snackbar\":92,\"../utils/banned-page\":95,\"./button\":49,\"./form\":56,\"react\":\"react\"}],73:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Snackbar = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/* jshint ignore:start */\nvar TYPES_CLASSES = {\n  'info': 'alert-info',\n  'success': 'alert-success',\n  'warning': 'alert-warning',\n  'error': 'alert-danger'\n};\n/* jshint ignore:end */\n\nvar Snackbar = exports.Snackbar = function (_React$Component) {\n  _inherits(Snackbar, _React$Component);\n\n  function Snackbar() {\n    _classCallCheck(this, Snackbar);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Snackbar).apply(this, arguments));\n  }\n\n  _createClass(Snackbar, [{\n    key: 'getSnackbarClass',\n    value: function getSnackbarClass() {\n      var snackbarClass = 'alerts-snackbar';\n      if (this.props.isVisible) {\n        snackbarClass += ' in';\n      } else {\n        snackbarClass += ' out';\n      }\n      return snackbarClass;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getSnackbarClass() },\n        _react2.default.createElement(\n          'p',\n          { className: 'alert ' + TYPES_CLASSES[this.props.type] },\n          this.props.message\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Snackbar;\n}(_react2.default.Component);\n\nfunction select(state) {\n  return state.snackbar;\n}\n\n},{\"react\":\"react\"}],74:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactGuestNav = exports.GuestNav = exports.GuestMenu = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _registerButton = require('../register-button');\n\nvar _registerButton2 = _interopRequireDefault(_registerButton);\n\nvar _signIn = require('../sign-in.js');\n\nvar _signIn2 = _interopRequireDefault(_signIn);\n\nvar _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nvar _modal = require('../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar GuestMenu = exports.GuestMenu = function (_React$Component) {\n  _inherits(GuestMenu, _React$Component);\n\n  function GuestMenu() {\n    _classCallCheck(this, GuestMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestMenu).apply(this, arguments));\n  }\n\n  _createClass(GuestMenu, [{\n    key: 'showSignInModal',\n    value: function showSignInModal() {\n      _modal2.default.show(_signIn2.default);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu user-dropdown dropdown-menu-right',\n          role: 'menu' },\n        _react2.default.createElement(\n          'li',\n          { className: 'guest-preview' },\n          _react2.default.createElement(\n            'h4',\n            null,\n            gettext(\"You are browsing as guest.\")\n          ),\n          _react2.default.createElement(\n            'p',\n            null,\n            gettext('Sign in or register to start and participate in discussions.')\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-xs-6' },\n              _react2.default.createElement(\n                'button',\n                { type: 'button', className: 'btn btn-default btn-block',\n                  onClick: this.showSignInModal },\n                gettext(\"Sign in\")\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-xs-6' },\n              _react2.default.createElement(\n                _registerButton2.default,\n                { className: 'btn-primary btn-block' },\n                gettext(\"Register\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GuestMenu;\n}(_react2.default.Component);\n\nvar GuestNav = exports.GuestNav = function (_GuestMenu) {\n  _inherits(GuestNav, _GuestMenu);\n\n  function GuestNav() {\n    _classCallCheck(this, GuestNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestNav).apply(this, arguments));\n  }\n\n  _createClass(GuestNav, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'nav nav-guest' },\n        _react2.default.createElement(\n          'button',\n          { type: 'button', className: 'btn navbar-btn btn-default',\n            onClick: this.showSignInModal },\n          gettext(\"Sign in\")\n        ),\n        _react2.default.createElement(\n          _registerButton2.default,\n          { className: 'navbar-btn btn-primary' },\n          gettext(\"Register\")\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GuestNav;\n}(GuestMenu);\n\nvar CompactGuestNav = exports.CompactGuestNav = function (_React$Component2) {\n  _inherits(CompactGuestNav, _React$Component2);\n\n  function CompactGuestNav() {\n    _classCallCheck(this, CompactGuestNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactGuestNav).apply(this, arguments));\n  }\n\n  _createClass(CompactGuestNav, [{\n    key: 'showGuestMenu',\n    value: function showGuestMenu() {\n      _mobileNavbarDropdown2.default.show(GuestMenu);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showGuestMenu },\n        _react2.default.createElement(_avatar2.default, { size: '64' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactGuestNav;\n}(_react2.default.Component);\n\n},{\"../../services/mobile-navbar-dropdown\":89,\"../../services/modal\":90,\"../avatar\":47,\"../register-button\":66,\"../sign-in.js\":72,\"react\":\"react\"}],75:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactUserMenu = exports.UserMenu = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _guestNav = require('./guest-nav');\n\nvar _userNav = require('./user-nav');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar UserMenu = exports.UserMenu = function (_React$Component) {\n  _inherits(UserMenu, _React$Component);\n\n  function UserMenu() {\n    _classCallCheck(this, UserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));\n  }\n\n  _createClass(UserMenu, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.props.isAuthenticated) {\n        return _react2.default.createElement(_userNav.UserNav, { user: this.props.user });\n      } else {\n        return _react2.default.createElement(_guestNav.GuestNav, null);\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserMenu;\n}(_react2.default.Component);\n\nvar CompactUserMenu = exports.CompactUserMenu = function (_React$Component2) {\n  _inherits(CompactUserMenu, _React$Component2);\n\n  function CompactUserMenu() {\n    _classCallCheck(this, CompactUserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserMenu).apply(this, arguments));\n  }\n\n  _createClass(CompactUserMenu, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.props.isAuthenticated) {\n        return _react2.default.createElement(_userNav.CompactUserNav, { user: this.props.user });\n      } else {\n        return _react2.default.createElement(_guestNav.CompactGuestNav, null);\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactUserMenu;\n}(_react2.default.Component);\n\nfunction select(state) {\n  return state.auth;\n}\n\n},{\"./guest-nav\":74,\"./user-nav\":76,\"react\":\"react\"}],76:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactUserNav = exports.UserNav = exports.UserMenu = undefined;\nexports.selectUserMenu = selectUserMenu;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _root = require('../change-avatar/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nvar _modal = require('../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar UserMenu = exports.UserMenu = function (_React$Component) {\n  _inherits(UserMenu, _React$Component);\n\n  function UserMenu() {\n    _classCallCheck(this, UserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));\n  }\n\n  _createClass(UserMenu, [{\n    key: 'logout',\n    value: function logout() {\n      var decision = confirm(gettext(\"Are you sure you want to sign out?\"));\n      if (decision) {\n        $('#hidden-logout-form').submit();\n      }\n    }\n  }, {\n    key: 'changeAvatar',\n    value: function changeAvatar() {\n      _modal2.default.show((0, _reactRedux.connect)(_root.select)(_root2.default));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu user-dropdown dropdown-menu-right',\n          role: 'menu' },\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-header' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            this.props.user.username\n          )\n        ),\n        _react2.default.createElement('li', { className: 'divider' }),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'account_circle'\n            ),\n            gettext(\"See your profile\")\n          )\n        ),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('USERCP_URL') },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'done_all'\n            ),\n            gettext(\"Change options\")\n          )\n        ),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link', onClick: this.changeAvatar },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'portrait'\n            ),\n            gettext(\"Change avatar\")\n          )\n        ),\n        _react2.default.createElement('li', { className: 'divider' }),\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-footer' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default btn-block',\n              onClick: this.logout },\n            gettext(\"Log out\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserMenu;\n}(_react2.default.Component);\n\nvar UserNav = exports.UserNav = function (_React$Component2) {\n  _inherits(UserNav, _React$Component2);\n\n  function UserNav() {\n    _classCallCheck(this, UserNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserNav).apply(this, arguments));\n  }\n\n  _createClass(UserNav, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'ul nav navbar-nav nav-user' },\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown' },\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url, className: 'dropdown-toggle',\n              'data-toggle': 'dropdown', 'aria-haspopup': 'true', 'aria-expanded': 'false',\n              role: 'button' },\n            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })\n          ),\n          _react2.default.createElement(UserMenu, { user: this.props.user })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserNav;\n}(_react2.default.Component);\n\nfunction selectUserMenu(state) {\n  return { user: state.auth.user };\n}\n\nvar CompactUserNav = exports.CompactUserNav = function (_React$Component3) {\n  _inherits(CompactUserNav, _React$Component3);\n\n  function CompactUserNav() {\n    _classCallCheck(this, CompactUserNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserNav).apply(this, arguments));\n  }\n\n  _createClass(CompactUserNav, [{\n    key: 'showUserMenu',\n    value: function showUserMenu() {\n      _mobileNavbarDropdown2.default.showConnected('user-menu', (0, _reactRedux.connect)(selectUserMenu)(UserMenu));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showUserMenu },\n        _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactUserNav;\n}(_react2.default.Component);\n\n},{\"../../index\":78,\"../../services/mobile-navbar-dropdown\":89,\"../../services/modal\":90,\"../avatar\":47,\"../change-avatar/root\":53,\"react\":\"react\",\"react-redux\":\"react-redux\"}],77:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.toggle = function () {\n      _this.props.onChange({\n        target: {\n          value: !_this.props.value\n        }\n      });\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.value) {\n        return \"btn btn-yes-no btn-yes-no-on\";\n      } else {\n        return \"btn btn-yes-no btn-yes-no-off\";\n      }\n    }\n  }, {\n    key: \"getIcon\",\n    value: function getIcon() {\n      if (this.props.value) {\n        return this.props.iconOn || 'check_box';\n      } else {\n        return this.props.iconOff || 'check_box_outline_blank';\n      }\n    }\n  }, {\n    key: \"getLabel\",\n    value: function getLabel() {\n      if (this.props.value) {\n        return this.props.labelOn || gettext(\"yes\");\n      } else {\n        return this.props.labelOff || gettext(\"no\");\n      }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: \"render\",\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"button\",\n        { type: \"button\",\n          onClick: this.toggle,\n          className: this.getClassName(),\n          id: this.props.id || null,\n          \"aria-describedby\": this.props['aria-describedby'] || null,\n          disabled: this.props.disabled || false },\n        _react2.default.createElement(\n          \"span\",\n          { className: \"material-icon\" },\n          this.getIcon()\n        ),\n        this.getLabel()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],78:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Misago = undefined;\n\nvar _orderedList = require('./utils/ordered-list');\n\nvar _orderedList2 = _interopRequireDefault(_orderedList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Misago = exports.Misago = function () {\n  function Misago() {\n    _classCallCheck(this, Misago);\n\n    this._initializers = [];\n    this._context = {};\n  }\n\n  _createClass(Misago, [{\n    key: 'addInitializer',\n    value: function addInitializer(initializer) {\n      this._initializers.push({\n        key: initializer.name,\n\n        item: initializer.initializer,\n\n        after: initializer.after,\n        before: initializer.before\n      });\n    }\n  }, {\n    key: 'init',\n    value: function init(context) {\n      var _this = this;\n\n      this._context = context;\n\n      var initOrder = new _orderedList2.default(this._initializers).orderedValues();\n      initOrder.forEach(function (initializer) {\n        initializer(_this);\n      });\n    }\n\n    // context accessors\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      return this._context.hasOwnProperty(key);\n    }\n  }, {\n    key: 'get',\n    value: function get(key, fallback) {\n      if (this.has(key)) {\n        return this._context[key];\n      } else {\n        return fallback || undefined;\n      }\n    }\n  }]);\n\n  return Misago;\n}();\n\n// create  singleton\n\nvar misago = new Misago();\n\n// expose it globally\nglobal.misago = misago;\n\n// and export it for tests and stuff\nexports.default = misago;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./utils/ordered-list\":99}],79:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SIGN_OUT = exports.SIGN_IN = exports.PATCH_USER = exports.initialState = undefined;\nexports.patchUser = patchUser;\nexports.signIn = signIn;\nexports.signOut = signOut;\nexports.default = auth;\n\nvar _users = require('./users');\n\nvar initialState = exports.initialState = {\n  signedIn: false,\n  signedOut: false\n};\n\nvar PATCH_USER = exports.PATCH_USER = 'PATCH_USER';\nvar SIGN_IN = exports.SIGN_IN = 'SIGN_IN';\nvar SIGN_OUT = exports.SIGN_OUT = 'SIGN_OUT';\n\nfunction patchUser(patch) {\n  return {\n    type: PATCH_USER,\n    patch: patch\n  };\n}\n\nfunction signIn(user) {\n  return {\n    type: SIGN_IN,\n    user: user\n  };\n}\n\nfunction signOut() {\n  var soft = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n  return {\n    type: SIGN_OUT,\n    soft: soft\n  };\n}\n\nfunction auth() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case PATCH_USER:\n      var newState = Object.assign({}, state);\n      newState.user = Object.assign({}, state.user, action.patch);\n      return newState;\n\n    case SIGN_IN:\n      return Object.assign({}, state, {\n        signedIn: action.user\n      });\n\n    case SIGN_OUT:\n      return Object.assign({}, state, {\n        isAuthenticated: false,\n        isAnonymous: true,\n        signedOut: !action.soft\n      });\n\n    case _users.UPDATE_AVATAR:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        var _newState = Object.assign({}, state);\n        _newState.user = Object.assign({}, state.user, {\n          'avatar_hash': action.avatarHash\n        });\n        return _newState;\n      }\n      return state;\n\n    case _users.UPDATE_USERNAME:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        var _newState2 = Object.assign({}, state);\n        _newState2.user = Object.assign({}, state.user, {\n          username: action.username,\n          slug: action.slug\n        });\n        return _newState2;\n      }\n      return state;\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":83}],80:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.showSnackbar = showSnackbar;\nexports.hideSnackbar = hideSnackbar;\nexports.default = snackbar;\nvar initialState = exports.initialState = {\n  type: 'info',\n  message: '',\n  isVisible: false\n};\n\nvar SHOW_SNACKBAR = exports.SHOW_SNACKBAR = 'SHOW_SNACKBAR';\nvar HIDE_SNACKBAR = exports.HIDE_SNACKBAR = 'HIDE_SNACKBAR';\n\nfunction showSnackbar(message, type) {\n  return {\n    type: SHOW_SNACKBAR,\n    message: message,\n    messageType: type\n  };\n}\n\nfunction hideSnackbar() {\n  return {\n    type: HIDE_SNACKBAR\n  };\n}\n\nfunction snackbar() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  if (action.type === SHOW_SNACKBAR) {\n    return {\n      type: action.messageType,\n      message: action.message,\n      isVisible: true\n    };\n  } else if (action.type === HIDE_SNACKBAR) {\n    return Object.assign({}, state, {\n      isVisible: false\n    });\n  } else {\n    return state;\n  }\n}\n\n},{}],81:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.doTick = doTick;\nexports.default = tick;\nvar initialState = exports.initialState = {\n  tick: 0\n};\n\nvar TICK = exports.TICK = 'TICK';\n\nfunction doTick() {\n  return {\n    type: TICK\n  };\n}\n\nfunction tick() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  if (action.type === TICK) {\n    return Object.assign({}, state, {\n      tick: state.tick + 1\n    });\n  } else {\n    return state;\n  }\n}\n\n},{}],82:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DEHYDRATE_RESULT = exports.ADD_NAME_CHANGE = undefined;\nexports.addNameChange = addNameChange;\nexports.dehydrate = dehydrate;\nexports.default = username;\n\nvar _users = require('./users');\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ADD_NAME_CHANGE = exports.ADD_NAME_CHANGE = 'ADD_NAME_CHANGE';\nvar DEHYDRATE_RESULT = exports.DEHYDRATE_RESULT = 'DEHYDRATE_RESULT';\n\nfunction addNameChange(change, user, changedBy) {\n  return {\n    type: ADD_NAME_CHANGE,\n    change: change,\n    user: user,\n    changedBy: changedBy\n  };\n}\n\nfunction dehydrate(items) {\n  return {\n    type: DEHYDRATE_RESULT,\n    items: items\n  };\n}\n\nfunction username() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case ADD_NAME_CHANGE:\n      var newState = state.slice();\n      newState.unshift({\n        id: Math.floor(Date.now() / 1000), // just small hax for getting id\n        changed_by: action.changedBy,\n        changed_by_username: action.changedBy.username,\n        changed_on: (0, _moment2.default)(),\n        new_username: action.change.username,\n        old_username: action.user.username\n      });\n      return newState;\n\n    case DEHYDRATE_RESULT:\n      return action.items.map(function (item) {\n        return Object.assign({}, item, {\n          changed_on: (0, _moment2.default)(item.changed_on)\n        });\n      });\n\n    case _users.UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            'avatar_hash': action.avatarHash\n          });\n        }\n\n        return Object.assign({}, item);\n      });\n\n    case _users.UPDATE_USERNAME:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            'username': action.username,\n            'slug': action.slug\n          });\n        }\n\n        return Object.assign({}, item);\n      });\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":83,\"moment\":\"moment\"}],83:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.updateAvatar = updateAvatar;\nexports.updateUsername = updateUsername;\nvar UPDATE_AVATAR = exports.UPDATE_AVATAR = 'UPDATE_AVATAR';\nvar UPDATE_USERNAME = exports.UPDATE_USERNAME = 'UPDATE_USERNAME';\n\nfunction updateAvatar(user, avatarHash) {\n  return {\n    type: UPDATE_AVATAR,\n    userId: user.id,\n    avatarHash: avatarHash\n  };\n}\n\nfunction updateUsername(user, username, slug) {\n  return {\n    type: UPDATE_USERNAME,\n    userId: user.id,\n    username: username,\n    slug: slug\n  };\n}\n\n},{}],84:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Ajax = exports.Ajax = function () {\n  function Ajax() {\n    _classCallCheck(this, Ajax);\n\n    this._cookieName = null;\n    this._csrfToken = null;\n  }\n\n  _createClass(Ajax, [{\n    key: 'init',\n    value: function init(cookieName) {\n      this._cookieName = cookieName;\n      this._csrfToken = this.getCsrfToken();\n    }\n  }, {\n    key: 'getCsrfToken',\n    value: function getCsrfToken() {\n      if (document.cookie.indexOf(this._cookieName) !== -1) {\n        var cookieRegex = new RegExp(this._cookieName + '\\=([^;]*)');\n        var cookie = document.cookie.match(cookieRegex)[0];\n        return cookie ? cookie.split('=')[1] : null;\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: 'request',\n    value: function request(method, url, data) {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        var xhr = {\n          url: url,\n          method: method,\n          headers: {\n            'X-CSRFToken': self._csrfToken\n          },\n\n          data: data ? JSON.stringify(data) : null,\n          contentType: \"application/json; charset=utf-8\",\n          dataType: 'json',\n\n          success: function success(data) {\n            resolve(data);\n          },\n\n          error: function error(jqXHR) {\n            var rejection = jqXHR.responseJSON || {};\n\n            rejection.status = jqXHR.status;\n\n            if (rejection.status === 0) {\n              rejection.detail = gettext(\"Lost connection with application.\");\n            }\n\n            rejection.statusText = jqXHR.statusText;\n\n            reject(rejection);\n          }\n        };\n\n        $.ajax(xhr);\n      });\n    }\n  }, {\n    key: 'get',\n    value: function get(url, params) {\n      if (params) {\n        url += '?' + $.param(params);\n      }\n      return this.request('GET', url);\n    }\n  }, {\n    key: 'post',\n    value: function post(url, data) {\n      return this.request('POST', url, data);\n    }\n  }, {\n    key: 'patch',\n    value: function patch(url, data) {\n      return this.request('PATCH', url, data);\n    }\n  }, {\n    key: 'put',\n    value: function put(url, data) {\n      return this.request('PUT', url, data);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(url) {\n      return this.request('DELETE', url);\n    }\n  }, {\n    key: 'upload',\n    value: function upload(url, data, progress) {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        var xhr = {\n          url: url,\n          method: 'POST',\n          headers: {\n            'X-CSRFToken': self._csrfToken\n          },\n\n          data: data,\n          contentType: false,\n          processData: false,\n\n          xhr: function xhr() {\n            var xhr = new window.XMLHttpRequest();\n            xhr.upload.addEventListener(\"progress\", function (evt) {\n              if (evt.lengthComputable) {\n                progress(Math.round(evt.loaded / evt.total * 100));\n              }\n            }, false);\n            return xhr;\n          },\n\n          success: function success(response) {\n            resolve(response);\n          },\n\n          error: function error(jqXHR) {\n            var rejection = jqXHR.responseJSON || {};\n\n            rejection.status = jqXHR.status;\n\n            if (rejection.status === 0) {\n              rejection.detail = gettext(\"Lost connection with application.\");\n            }\n\n            rejection.statusText = jqXHR.statusText;\n\n            reject(rejection);\n          }\n        };\n\n        $.ajax(xhr);\n      });\n    }\n  }]);\n\n  return Ajax;\n}();\n\nexports.default = new Ajax();\n\n},{}],85:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Auth = undefined;\n\nvar _auth = require('../reducers/auth');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// jshint ignore:line\n\nvar Auth = exports.Auth = function () {\n  function Auth() {\n    _classCallCheck(this, Auth);\n  }\n\n  _createClass(Auth, [{\n    key: 'init',\n    value: function init(store, local, modal) {\n      this._store = store;\n      this._local = local;\n      this._modal = modal;\n\n      // tell other tabs what auth state is because we are most current with it\n      this.syncSession();\n\n      // listen for other tabs to tell us that state changed\n      this.watchState();\n    }\n  }, {\n    key: 'syncSession',\n    value: function syncSession() {\n      var state = this._store.getState().auth;\n      if (state.isAuthenticated) {\n        this._local.set('auth', {\n          isAuthenticated: true,\n          username: state.user.username\n        });\n      } else {\n        this._local.set('auth', {\n          isAuthenticated: false\n        });\n      }\n    }\n  }, {\n    key: 'watchState',\n    value: function watchState() {\n      var _this = this;\n\n      this._local.watch('auth', function (newState) {\n        if (newState.isAuthenticated) {\n          _this._store.dispatch((0, _auth.signIn)({\n            username: newState.username\n          }));\n        } else {\n          _this._store.dispatch((0, _auth.signOut)());\n        }\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'signIn',\n    value: function signIn(user) {\n      this._store.dispatch((0, _auth.signIn)(user));\n      this._local.set('auth', {\n        isAuthenticated: true,\n        username: user.username\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'signOut',\n    value: function signOut() {\n      this._store.dispatch((0, _auth.signOut)());\n      this._local.set('auth', {\n        isAuthenticated: false\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'softSignOut',\n    value: function softSignOut() {\n      this._store.dispatch((0, _auth.signOut)(true));\n      this._local.set('auth', {\n        isAuthenticated: false\n      });\n      this._modal.hide();\n    }\n  }]);\n\n  return Auth;\n}();\n\nexports.default = new Auth();\n\n},{\"../reducers/auth\":79}],86:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global grecaptcha */\n// jshint ignore:line\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Captcha = exports.ReCaptcha = exports.ReCaptchaComponent = exports.QACaptcha = exports.NoCaptcha = exports.BaseCaptcha = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _formGroup = require('../components/form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// jshint ignore:line\n\nvar BaseCaptcha = exports.BaseCaptcha = function () {\n  function BaseCaptcha() {\n    _classCallCheck(this, BaseCaptcha);\n  }\n\n  _createClass(BaseCaptcha, [{\n    key: 'init',\n    value: function init(context, ajax, include, snackbar) {\n      this._context = context;\n      this._ajax = ajax;\n      this._include = include;\n      this._snackbar = snackbar;\n    }\n  }]);\n\n  return BaseCaptcha;\n}();\n\nvar NoCaptcha = exports.NoCaptcha = function (_BaseCaptcha) {\n  _inherits(NoCaptcha, _BaseCaptcha);\n\n  function NoCaptcha() {\n    _classCallCheck(this, NoCaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoCaptcha).apply(this, arguments));\n  }\n\n  _createClass(NoCaptcha, [{\n    key: 'load',\n    value: function load() {\n      return new Promise(function (resolve) {\n        // immediately resolve as we don't have anything to validate\n        resolve();\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return null;\n    }\n  }, {\n    key: 'component',\n    value: function component() {\n      return null;\n    }\n  }]);\n\n  return NoCaptcha;\n}(BaseCaptcha);\n\nvar QACaptcha = exports.QACaptcha = function (_BaseCaptcha2) {\n  _inherits(QACaptcha, _BaseCaptcha2);\n\n  function QACaptcha() {\n    _classCallCheck(this, QACaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(QACaptcha).apply(this, arguments));\n  }\n\n  _createClass(QACaptcha, [{\n    key: 'load',\n    value: function load() {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        self._ajax.get(self._context.get('CAPTCHA_API_URL')).then(function (data) {\n          self.question = data.question;\n          self.helpText = data.help_text;\n          resolve();\n        }, function () {\n          self._snackbar.error(gettext(\"Failed to load CAPTCHA.\"));\n          reject();\n        });\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return [];\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return _react2.default.createElement(\n        _formGroup2.default,\n        { label: this.question, 'for': 'id_captcha',\n          labelClass: kwargs.labelClass || \"col-sm-4\",\n          controlClass: kwargs.controlClass || \"col-sm-8\",\n          validation: kwargs.form.state.errors.captcha,\n          helpText: this.helpText || null },\n        _react2.default.createElement('input', { type: 'text', id: 'id_captcha', className: 'form-control',\n          'aria-describedby': 'id_captcha_status',\n          disabled: kwargs.form.state.isLoading,\n          onChange: kwargs.form.bindInput('captcha'),\n          value: kwargs.form.state.captcha })\n      );\n    }\n    /* jshint ignore:end */\n\n  }]);\n\n  return QACaptcha;\n}(BaseCaptcha);\n\nvar ReCaptchaComponent = exports.ReCaptchaComponent = function (_React$Component) {\n  _inherits(ReCaptchaComponent, _React$Component);\n\n  function ReCaptchaComponent() {\n    _classCallCheck(this, ReCaptchaComponent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptchaComponent).apply(this, arguments));\n  }\n\n  _createClass(ReCaptchaComponent, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this4 = this;\n\n      grecaptcha.render('recaptcha', {\n        'sitekey': this.props.siteKey,\n        'callback': function callback(response) {\n          // fire fakey event to binding\n          _this4.props.binding({\n            target: {\n              value: response\n            }\n          });\n        }\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement('div', { id: 'recaptcha' });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ReCaptchaComponent;\n}(_react2.default.Component);\n\nvar ReCaptcha = exports.ReCaptcha = function (_BaseCaptcha3) {\n  _inherits(ReCaptcha, _BaseCaptcha3);\n\n  function ReCaptcha() {\n    _classCallCheck(this, ReCaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptcha).apply(this, arguments));\n  }\n\n  _createClass(ReCaptcha, [{\n    key: 'load',\n    value: function load() {\n      this._include.include('https://www.google.com/recaptcha/api.js', true);\n\n      return new Promise(function (resolve) {\n        var wait = function wait() {\n          if (typeof grecaptcha === \"undefined\") {\n            window.setTimeout(function () {\n              wait();\n            }, 200);\n          } else {\n            resolve();\n          }\n        };\n        wait();\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return [];\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return _react2.default.createElement(\n        _formGroup2.default,\n        { label: gettext(\"Captcha\"), 'for': 'id_captcha',\n          labelClass: kwargs.labelClass || \"col-sm-4\",\n          controlClass: kwargs.controlClass || \"col-sm-8\",\n          validation: kwargs.form.state.errors.captcha,\n          helpText: gettext(\"Please solve the quick test.\") },\n        _react2.default.createElement(ReCaptchaComponent, { siteKey: this._context.get('SETTINGS').recaptcha_site_key,\n          binding: kwargs.form.bindInput('captcha') })\n      );\n    }\n    /* jshint ignore:end */\n\n  }]);\n\n  return ReCaptcha;\n}(BaseCaptcha);\n\nvar Captcha = exports.Captcha = function () {\n  function Captcha() {\n    _classCallCheck(this, Captcha);\n  }\n\n  _createClass(Captcha, [{\n    key: 'init',\n    value: function init(context, ajax, include, snackbar) {\n      switch (context.get('SETTINGS').captcha_type) {\n        case 'no':\n          this._captcha = new NoCaptcha();\n          break;\n\n        case 'qa':\n          this._captcha = new QACaptcha();\n          break;\n\n        case 're':\n          this._captcha = new ReCaptcha();\n          break;\n      }\n\n      this._captcha.init(context, ajax, include, snackbar);\n    }\n\n    // accessors for underlying strategy\n\n  }, {\n    key: 'load',\n    value: function load() {\n      return this._captcha.load();\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return this._captcha.validator();\n    }\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return this._captcha.component(kwargs);\n    }\n  }]);\n\n  return Captcha;\n}();\n\nexports.default = new Captcha();\n\n},{\"../components/form-group\":55,\"react\":\"react\"}],87:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Include = exports.Include = function () {\n  function Include() {\n    _classCallCheck(this, Include);\n  }\n\n  _createClass(Include, [{\n    key: 'init',\n    value: function init(staticUrl) {\n      this._staticUrl = staticUrl;\n      this._included = [];\n    }\n  }, {\n    key: 'include',\n    value: function include(script) {\n      var remote = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n      if (this._included.indexOf(script) === -1) {\n        this._included.push(script);\n        this._include(script, remote);\n      }\n    }\n  }, {\n    key: '_include',\n    value: function _include(script, remote) {\n      $.ajax({\n        url: (!remote ? this._staticUrl : '') + script,\n        cache: true,\n        dataType: 'script'\n      });\n    }\n  }]);\n\n  return Include;\n}();\n\nexports.default = new Include();\n\n},{}],88:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar storage = window.localStorage;\n\nvar LocalStorage = exports.LocalStorage = function () {\n  function LocalStorage() {\n    _classCallCheck(this, LocalStorage);\n  }\n\n  _createClass(LocalStorage, [{\n    key: 'init',\n    value: function init(prefix) {\n      var _this = this;\n\n      this._prefix = prefix;\n      this._watchers = [];\n\n      window.addEventListener('storage', function (e) {\n        var newValueJson = JSON.parse(e.newValue);\n        _this._watchers.forEach(function (watcher) {\n          if (watcher.key === e.key && e.oldValue !== e.newValue) {\n            watcher.callback(newValueJson);\n          }\n        });\n      });\n    }\n  }, {\n    key: 'set',\n    value: function set(key, value) {\n      storage.setItem(this._prefix + key, JSON.stringify(value));\n    }\n  }, {\n    key: 'get',\n    value: function get(key) {\n      var itemString = storage.getItem(this._prefix + key);\n      if (itemString) {\n        return JSON.parse(itemString);\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: 'watch',\n    value: function watch(key, callback) {\n      this._watchers.push({\n        key: this._prefix + key,\n        callback: callback\n      });\n    }\n  }]);\n\n  return LocalStorage;\n}();\n\nexports.default = new LocalStorage();\n\n},{}],89:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.MobileNavbarDropdown = undefined;\n\nvar _mountComponent = require('../utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MobileNavbarDropdown = exports.MobileNavbarDropdown = function () {\n  function MobileNavbarDropdown() {\n    _classCallCheck(this, MobileNavbarDropdown);\n  }\n\n  _createClass(MobileNavbarDropdown, [{\n    key: 'init',\n    value: function init(element) {\n      this._element = element;\n      this._component = null;\n    }\n  }, {\n    key: 'show',\n    value: function show(component) {\n      if (this._component === component) {\n        this.hide();\n      } else {\n        this._component = component;\n        (0, _mountComponent2.default)(component, this._element.id);\n        $(this._element).addClass('open');\n      }\n    }\n  }, {\n    key: 'showConnected',\n    value: function showConnected(name, component) {\n      if (this._component === name) {\n        this.hide();\n      } else {\n        this._component = name;\n        (0, _mountComponent2.default)(component, this._element.id, true);\n        $(this._element).addClass('open');\n      }\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      $(this._element).removeClass('open');\n      this._component = null;\n    }\n  }]);\n\n  return MobileNavbarDropdown;\n}();\n\nexports.default = new MobileNavbarDropdown();\n\n},{\"../utils/mount-component\":98}],90:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Modal = undefined;\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _mountComponent = require('../utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Modal = exports.Modal = function () {\n  function Modal() {\n    _classCallCheck(this, Modal);\n  }\n\n  _createClass(Modal, [{\n    key: 'init',\n    value: function init(element) {\n      var _this = this;\n\n      this._element = element;\n\n      this._modal = $(element).modal({ show: false });\n\n      this._modal.on('hidden.bs.modal', function () {\n        _reactDom2.default.unmountComponentAtNode(_this._element);\n      });\n    }\n  }, {\n    key: 'show',\n    value: function show(component) {\n      (0, _mountComponent2.default)(component, this._element.id);\n      this._modal.modal('show');\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      this._modal.modal('hide');\n    }\n  }]);\n\n  return Modal;\n}();\n\nexports.default = new Modal();\n\n},{\"../utils/mount-component\":98,\"react-dom\":\"react-dom\"}],91:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PageTitle = exports.PageTitle = function () {\n  function PageTitle() {\n    _classCallCheck(this, PageTitle);\n  }\n\n  _createClass(PageTitle, [{\n    key: 'init',\n    value: function init(forumName) {\n      this._forumName = forumName;\n    }\n  }, {\n    key: 'set',\n    value: function set(title) {\n      if (typeof title === 'string') {\n        title = { title: title };\n      }\n\n      var finalTitle = title.title;\n\n      if (title.page) {\n        var pageLabel = interpolate(gettext('page %(page)s'), {\n          page: title.page\n        }, true);\n\n        finalTitle += ' (' + pageLabel + ')';\n      }\n\n      if (title.parent) {\n        finalTitle += ' | ' + title.parent;\n      }\n\n      document.title = finalTitle + ' | ' + this._forumName;\n    }\n  }]);\n\n  return PageTitle;\n}();\n\nexports.default = new PageTitle();\n\n},{}],92:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Snackbar = undefined;\n\nvar _snackbar = require('../reducers/snackbar');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar HIDE_ANIMATION_LENGTH = 300;\nvar MESSAGE_SHOW_LENGTH = 5000;\n\nvar Snackbar = exports.Snackbar = function () {\n  function Snackbar() {\n    _classCallCheck(this, Snackbar);\n  }\n\n  _createClass(Snackbar, [{\n    key: 'init',\n    value: function init(store) {\n      this._store = store;\n      this._timeout = null;\n    }\n  }, {\n    key: 'alert',\n    value: function alert(message, type) {\n      var _this = this;\n\n      if (this._timeout) {\n        window.clearTimeout(this._timeout);\n        this._store.dispatch((0, _snackbar.hideSnackbar)());\n\n        this._timeout = window.setTimeout(function () {\n          _this._timeout = null;\n          _this.alert(message, type);\n        }, HIDE_ANIMATION_LENGTH);\n      } else {\n        this._store.dispatch((0, _snackbar.showSnackbar)(message, type));\n        this._timeout = window.setTimeout(function () {\n          _this._store.dispatch((0, _snackbar.hideSnackbar)());\n          _this._timeout = null;\n        }, MESSAGE_SHOW_LENGTH);\n      }\n    }\n\n    // shorthands for message types\n\n  }, {\n    key: 'info',\n    value: function info(message) {\n      this.alert(message, 'info');\n    }\n  }, {\n    key: 'success',\n    value: function success(message) {\n      this.alert(message, 'success');\n    }\n  }, {\n    key: 'warning',\n    value: function warning(message) {\n      this.alert(message, 'warning');\n    }\n  }, {\n    key: 'error',\n    value: function error(message) {\n      this.alert(message, 'error');\n    }\n\n    // shorthand for api errors\n\n  }, {\n    key: 'apiError',\n    value: function apiError(rejection) {\n      var message = gettext(\"Unknown error has occured.\");\n\n      if (rejection.status === 0) {\n        message = rejection.detail;\n      }\n\n      if (rejection.status === 400 && rejection.detail) {\n        message = rejection.detail;\n      }\n\n      if (rejection.status === 403) {\n        message = rejection.detail;\n        if (message === \"Permission denied\") {\n          message = gettext(\"You don't have permission to perform this action.\");\n        }\n      }\n\n      if (rejection.status === 404) {\n        message = gettext(\"Action link is invalid.\");\n      }\n\n      this.error(message);\n    }\n  }]);\n\n  return Snackbar;\n}();\n\nexports.default = new Snackbar();\n\n},{\"../reducers/snackbar\":80}],93:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.StoreWrapper = undefined;\n\nvar _redux = require('redux');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar StoreWrapper = exports.StoreWrapper = function () {\n  function StoreWrapper() {\n    _classCallCheck(this, StoreWrapper);\n\n    this._store = null;\n    this._reducers = {};\n    this._initialState = {};\n  }\n\n  _createClass(StoreWrapper, [{\n    key: 'addReducer',\n    value: function addReducer(name, reducer, initialState) {\n      this._reducers[name] = reducer;\n      this._initialState[name] = initialState;\n    }\n  }, {\n    key: 'init',\n    value: function init() {\n      this._store = (0, _redux.createStore)((0, _redux.combineReducers)(this._reducers), this._initialState);\n    }\n  }, {\n    key: 'getStore',\n    value: function getStore() {\n      return this._store;\n    }\n\n    // Store API\n\n  }, {\n    key: 'getState',\n    value: function getState() {\n      return this._store.getState();\n    }\n  }, {\n    key: 'dispatch',\n    value: function dispatch(action) {\n      return this._store.dispatch(action);\n    }\n  }]);\n\n  return StoreWrapper;\n}();\n\nexports.default = new StoreWrapper();\n\n},{\"redux\":\"redux\"}],94:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* global zxcvbn */\n\nvar Zxcvbn = exports.Zxcvbn = function () {\n  function Zxcvbn() {\n    _classCallCheck(this, Zxcvbn);\n  }\n\n  _createClass(Zxcvbn, [{\n    key: \"init\",\n    value: function init(include) {\n      this._include = include;\n    }\n  }, {\n    key: \"scorePassword\",\n    value: function scorePassword(password, inputs) {\n      // 0-4 score, the more the stronger password\n      return zxcvbn(password, inputs).score;\n    }\n  }, {\n    key: \"load\",\n    value: function load() {\n      if (typeof zxcvbn === \"undefined\") {\n        this._include.include('misago/js/zxcvbn.js');\n        return this._loadingPromise();\n      } else {\n        return this._loadedPromise();\n      }\n    }\n  }, {\n    key: \"_loadingPromise\",\n    value: function _loadingPromise() {\n      return new Promise(function (resolve) {\n        var wait = function wait() {\n          if (typeof zxcvbn === \"undefined\") {\n            window.setTimeout(function () {\n              wait();\n            }, 200);\n          } else {\n            resolve();\n          }\n        };\n        wait();\n      });\n    }\n  }, {\n    key: \"_loadedPromise\",\n    value: function _loadedPromise() {\n      // we have already loaded zxcvbn.js, resolve away!\n      return new Promise(function (resolve) {\n        resolve();\n      });\n    }\n  }]);\n\n  return Zxcvbn;\n}();\n\nexports.default = new Zxcvbn();\n\n},{}],95:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (ban, changeState) {\n  _reactDom2.default.render(\n  /* jshint ignore:start */\n  _react2.default.createElement(\n    _reactRedux.Provider,\n    { store: _store2.default.getStore() },\n    _react2.default.createElement(RedrawedBannedPage, { message: ban.message,\n      expires: ban.expires_on ? (0, _moment2.default)(ban.expires_on) : null })\n  ),\n  /* jshint ignore:end */\n  document.getElementById('page-mount'));\n\n  if (typeof changeState === 'undefined' || changeState) {\n    var forumName = _index2.default.get('SETTINGS').forum_name;\n    document.title = gettext(\"You are banned\") + ' | ' + forumName;\n    window.history.pushState({}, \"\", _index2.default.get('BANNED_URL'));\n  }\n};\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _bannedPage = require('../components/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// jshint ignore:line\n\n/* jshint ignore:start */\n// jshint ignore:line\n// jshint ignore:line\nvar select = function select(state) {\n  return state.tick;\n}; // jshint ignore:line\n// jshint ignore:line\n\nvar RedrawedBannedPage = (0, _reactRedux.connect)(select)(_bannedPage2.default);\n/* jshint ignore:end */\n\n},{\"../components/banned-page\":48,\"../index\":78,\"../services/store\":93,\"moment\":\"moment\",\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\"}],96:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (list, rowWidth) {\n  var padding = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n  var rows = [];\n  var row = [];\n\n  list.forEach(function (element) {\n    row.push(element);\n    if (row.length === rowWidth) {\n      rows.push(row);\n      row = [];\n    }\n  });\n\n  // pad row to required length?\n  if (padding !== false && row.length > 0 && row.length < rowWidth) {\n    for (var i = row.length; i < rowWidth; i++) {\n      row.push(padding);\n    }\n  }\n\n  if (row.length) {\n    rows.push(row);\n  }\n\n  return rows;\n};\n\n},{}],97:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (bytes) {\n  if (bytes > 1000 * 1000 * 1000) {\n    return Math.round(bytes * 100 / (1000 * 1000 * 1000)) / 100 + ' GB';\n  } else if (bytes > 1000 * 1000) {\n    return Math.round(bytes * 100 / (1000 * 1000)) / 100 + ' MB';\n  } else if (bytes > 1000) {\n    return Math.round(bytes * 100 / 1000) / 100 + ' KB';\n  } else {\n    return Math.round(bytes * 100) / 100 + ' B';\n  }\n};\n\n},{}],98:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (Component, rootElementId) {\n  var connected = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];\n\n  var rootElement = document.getElementById(rootElementId);\n\n  if (rootElement) {\n    if (connected) {\n      _reactDom2.default.render(\n      /* jshint ignore:start */\n      _react2.default.createElement(\n        _reactRedux.Provider,\n        { store: _store2.default.getStore() },\n        _react2.default.createElement(Component, null)\n      ),\n      /* jshint ignore:end */\n      rootElement);\n    } else {\n      _reactDom2.default.render(\n      /* jshint ignore:start */\n      _react2.default.createElement(Component, null),\n      /* jshint ignore:end */\n      rootElement);\n    }\n  }\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n},{\"../services/store\":93,\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\"}],99:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OrderedList = function () {\n  function OrderedList(items) {\n    _classCallCheck(this, OrderedList);\n\n    this.isOrdered = false;\n    this._items = items || [];\n  }\n\n  _createClass(OrderedList, [{\n    key: \"add\",\n    value: function add(key, item, order) {\n      this._items.push({\n        key: key,\n        item: item,\n\n        after: order ? order.after || null : null,\n        before: order ? order.before || null : null\n      });\n    }\n  }, {\n    key: \"get\",\n    value: function get(key, value) {\n      for (var i = 0; i < this._items.length; i++) {\n        if (this._items[i].key === key) {\n          return this._items[i].item;\n        }\n      }\n\n      return value;\n    }\n  }, {\n    key: \"has\",\n    value: function has(key) {\n      return this.get(key) !== undefined;\n    }\n  }, {\n    key: \"values\",\n    value: function values() {\n      var values = [];\n      for (var i = 0; i < this._items.length; i++) {\n        values.push(this._items[i].item);\n      }\n      return values;\n    }\n  }, {\n    key: \"order\",\n    value: function order(values_only) {\n      if (!this.isOrdered) {\n        this._items = this._order(this._items);\n        this.isOrdered = true;\n      }\n\n      if (values_only || typeof values_only === 'undefined') {\n        return this.values();\n      } else {\n        return this._items;\n      }\n    }\n  }, {\n    key: \"orderedValues\",\n    value: function orderedValues() {\n      return this.order(true);\n    }\n  }, {\n    key: \"_order\",\n    value: function _order(unordered) {\n      // Index of unordered items\n      var index = [];\n      unordered.forEach(function (item) {\n        index.push(item.key);\n      });\n\n      // Ordered items\n      var ordered = [];\n      var ordering = [];\n\n      // First pass: register items that\n      // don't specify their order\n      unordered.forEach(function (item) {\n        if (!item.after && !item.before) {\n          ordered.push(item);\n          ordering.push(item.key);\n        }\n      });\n\n      // Second pass: register items that\n      // specify their before to \"_end\"\n      unordered.forEach(function (item) {\n        if (item.before === \"_end\") {\n          ordered.push(item);\n          ordering.push(item.key);\n        }\n      });\n\n      // Third pass: keep iterating items\n      // until we hit iterations limit or finish\n      // ordering list\n      function insertItem(item) {\n        var insertAt = -1;\n        if (ordering.indexOf(item.key) === -1) {\n          if (item.after) {\n            insertAt = ordering.indexOf(item.after);\n            if (insertAt !== -1) {\n              insertAt += 1;\n            }\n          } else if (item.before) {\n            insertAt = ordering.indexOf(item.before);\n          }\n\n          if (insertAt !== -1) {\n            ordered.splice(insertAt, 0, item);\n            ordering.splice(insertAt, 0, item.key);\n          }\n        }\n      }\n\n      var iterations = 200;\n      while (iterations > 0 && index.length !== ordering.length) {\n        iterations -= 1;\n        unordered.forEach(insertItem);\n      }\n\n      return ordered;\n    }\n  }]);\n\n  return OrderedList;\n}();\n\nexports.default = OrderedList;\n\n},{}],100:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.int = int;\nexports.range = range;\nfunction int(min, max) {\n  return Math.floor(Math.random() * (max + 1)) + min;\n}\n\nfunction range(min, max) {\n  var array = new Array(int(min, max));\n  for (var i = 0; i < array.length; i++) {\n    array[i] = i;\n  }\n\n  return array;\n}\n\n},{}],101:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (options) {\n  var routes = {\n    'component': options.component,\n    'childRoutes': [{\n      'path': options.root,\n      'onEnter': function onEnter(nextState, replaceState) {\n        replaceState(null, options.paths[0].path);\n      }\n    }].concat(options.paths.map(function (path) {\n      return {\n        'path': path.path,\n        'component': path.component\n      };\n    }))\n  };\n\n  _reactDom2.default.render(_react2.default.createElement(\n    _reactRedux.Provider,\n    { store: _store2.default.getStore() },\n    _react2.default.createElement(_reactRouter.Router, { routes: routes, history: history })\n  ), rootElement);\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _reactRouter = require('react-router');\n\nvar _createBrowserHistory = require('history/lib/createBrowserHistory');\n\nvar _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// jshint ignore:start\n\nvar rootElement = document.getElementById('page-mount');\nvar history = new _createBrowserHistory2.default();\n\n},{\"../services/store\":93,\"history/lib/createBrowserHistory\":36,\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\",\"react-router\":\"react-router\"}],102:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.required = required;\nexports.email = email;\nexports.minLength = minLength;\nexports.maxLength = maxLength;\nexports.usernameMinLength = usernameMinLength;\nexports.usernameMaxLength = usernameMaxLength;\nexports.usernameContent = usernameContent;\nexports.passwordMinLength = passwordMinLength;\nvar EMAIL = /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\nvar USERNAME = new RegExp('^[0-9a-z]+$', 'i');\n\nfunction required() {\n  return function (value) {\n    if ($.trim(value).length === 0) {\n      return gettext(\"This field is required.\");\n    }\n  };\n}\n\nfunction email(message) {\n  return function (value) {\n    if (!EMAIL.test(value)) {\n      return message || gettext(\"Enter a valid email address.\");\n    }\n  };\n}\n\nfunction minLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = '';\n    var length = $.trim(value).length;\n\n    if (length < limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length);\n      } else {\n        returnMessage = ngettext(\"Ensure this value has at least %(limit_value)s character (it has %(show_value)s).\", \"Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).\", limitValue);\n      }\n      return interpolate(returnMessage, {\n        limit_value: limitValue,\n        show_value: length\n      }, true);\n    }\n  };\n}\n\nfunction maxLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = '';\n    var length = $.trim(value).length;\n\n    if (length > limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length);\n      } else {\n        returnMessage = ngettext(\"Ensure this value has at most %(limit_value)s character (it has %(show_value)s).\", \"Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).\", limitValue);\n      }\n      return interpolate(returnMessage, {\n        limit_value: limitValue,\n        show_value: length\n      }, true);\n    }\n  };\n}\n\nfunction usernameMinLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Username must be at least %(limit_value)s character long.\", \"Username must be at least %(limit_value)s characters long.\", limitValue);\n  };\n  return this.minLength(settings.username_length_min, message);\n}\n\nfunction usernameMaxLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Username cannot be longer than %(limit_value)s character.\", \"Username cannot be longer than %(limit_value)s characters.\", limitValue);\n  };\n  return this.maxLength(settings.username_length_max, message);\n}\n\nfunction usernameContent() {\n  return function (value) {\n    if (!USERNAME.test($.trim(value))) {\n      return gettext(\"Username can only contain latin alphabet letters and digits.\");\n    }\n  };\n}\n\nfunction passwordMinLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Valid password must be at least %(limit_value)s character long.\", \"Valid password must be at least %(limit_value)s characters long.\", limitValue);\n  };\n  return this.minLength(settings.password_length_min, message);\n}\n\n},{}]},{},[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]);\n"],"sourceRoot":"/source/"}
+{"version":3,"sources":["misago.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length",1,"module","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","setTimeout","len","run","clearTimeout","Item","fun","array","this","noop","process","nextTick","args","Array","arguments","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask",2,"global","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","value","Misago","undefined","_orderedList","_orderedList2","_initializers","_context","initializer","item","after","before","context","_this","initOrder","orderedValues","forEach","fallback","has","misago","self","window","../../../../documents/misago/frontend/src/utils/ordered-list",3,"_ajax2","init","_index2","get","_index","_ajax","addInitializer","../../../../../documents/misago/frontend/src/index","../../../../../documents/misago/frontend/src/services/ajax",4,"_mountComponent2","_reactRedux","connect","_authMessage","select","_authMessage2","_mountComponent","../../../../../documents/misago/frontend/src/components/auth-message","../../../../../documents/misago/frontend/src/utils/mount-component","react-redux",5,"_store2","addReducer","_auth2","assign","isAuthenticated","isAnonymous","user","_auth","initialState","_store","../../../../../documents/misago/frontend/src/reducers/auth","../../../../../documents/misago/frontend/src/services/store",6,"_localStorage2","_modal2","_modal","_localStorage","../../../../../documents/misago/frontend/src/services/auth","../../../../../documents/misago/frontend/src/services/local-storage","../../../../../documents/misago/frontend/src/services/modal",7,"_bannedPage2","_bannedPage","../../../../../documents/misago/frontend/src/utils/banned-page",8,"_captcha2","_include2","_snackbar2","_captcha","_include","_snackbar","../../../../../documents/misago/frontend/src/services/captcha","../../../../../documents/misago/frontend/src/services/include","../../../../../documents/misago/frontend/src/services/snackbar",9,10,11,"element","document","getElementById","_mobileNavbarDropdown2","_mobileNavbarDropdown","../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown",12,13,"_moment2","locale","$","attr","_moment","moment",14,"_routedComponent2","root","component","_root2","paths","_root","_routedComponent","../../../../../documents/misago/frontend/src/components/options/root","../../../../../documents/misago/frontend/src/utils/routed-component",15,"_pageTitle2","forum_name","_pageTitle","../../../../../documents/misago/frontend/src/services/page-title",16,"_requestActivationLink2","_requestActivationLink","../../../../../documents/misago/frontend/src/components/request-activation-link",17,"_requestPasswordReset2","_requestPasswordReset","../../../../../documents/misago/frontend/src/components/request-password-reset",18,"_resetPasswordForm2","_resetPasswordForm","../../../../../documents/misago/frontend/src/components/reset-password-form",19,"Snackbar","../../../../../documents/misago/frontend/src/components/snackbar",20,"../../../../../documents/misago/frontend/src/reducers/snackbar",21,22,23,"_tick2","_tick","../../../../../documents/misago/frontend/src/reducers/tick",24,"setInterval","dispatch","doTick","TICK_PERIOD",25,"UserMenu","CompactUserMenu","../../../../../documents/misago/frontend/src/components/user-menu/root",26,"_usernameHistory2","_usernameHistory","../../../../../documents/misago/frontend/src/reducers/username-history",27,"../../../../../documents/misago/frontend/src/components/users/root",28,"_users2","_users","../../../../../documents/misago/frontend/src/reducers/users",29,"_zxcvbn2","_zxcvbn","../../../../../documents/misago/frontend/src/services/zxcvbn",30,"isUndefinedOrNull","isBuffer","x","copy","slice","objEquiv","b","opts","isArguments","pSlice","deepEqual","ka","objectKeys","kb","sort","actual","expected","Date","getTime","strict","./lib/is_arguments.js","./lib/keys.js",31,"supported","object","toString","unsupported","hasOwnProperty","propertyIsEnumerable","supportsArgumentsClass",32,"shim","keys",33,"PUSH","REPLACE","POP",34,"loopAsync","turns","work","callback","done","isDone","next","currentTurn",35,"createKey","KeyPrefix","saveState","state","sessionStorage","setItem","JSON","stringify","error","SecurityError","NODE_ENV","_warning2","QuotaExceededError","readState","json","getItem","parse","_warning","_process","warning",36,"addEventListener","node","event","listener","attachEvent","removeEventListener","detachEvent","getHashPath","location","href","split","replaceHashPath","path","replace","pathname","search","getWindowPath","hash","go","history","getUserConfirmation","message","confirm","supportsHistory","ua","navigator","userAgent","indexOf","supportsGoWithoutReloadUsingHash",37,"canUseDOM","createElement",38,"createBrowserHistory","getCurrentLocation","historyState","_DOMUtils","_historyState","_DOMStateStorage","isSupported","replaceState","_extends","_parsePath2","createLocation","startPopStateListener","_ref","popStateListener","transitionTo","finishTransition","basename","action","_Actions","useRefresh","pushState","listenBefore","listenerCount","stopPopStateListener","unlisten","listen","registerTransitionHook","hook","unregisterTransitionHook","options","_ExecutionEnvironment","_invariant2","forceRefresh","_createDOMHistory2","source","_invariant","_createDOMHistory","_parsePath","./Actions","./DOMStateStorage","./DOMUtils","./ExecutionEnvironment","./createDOMHistory","./parsePath","invariant",39,"createDOMHistory","_createHistory2","_createHistory","./createHistory",40,"createRandomKey","Math","random","substr","locationsAreEqual","_deepEqual2","createHistory","transitionHooks","filter","getCurrent","pendingLocation","allKeys","updateLocation","newLocation","current","changeListeners","_location","confirmTransitionTo","_AsyncUtils","index","_runTransitionHook2","result","ok","nextLocation","prevPath","createPath","nextPath","prevIndex","nextIndex","goBack","goForward","keyLength","createHref","_createLocation3","setState","updateLocationState","DefaultKeyLength","_deprecate2","_deepEqual","_createLocation2","_runTransitionHook","_deprecate","./AsyncUtils","./createLocation","./deprecate","./runTransitionHook","deep-equal",41,"_fourthArg",42,"deprecate","fn",43,"extractPath","string","match","substring",44,"parsePath","_extractPath2","hashIndex","searchIndex","_extractPath","./extractPath",45,"runTransitionHook",46,"condition","format","c","d","argIndex","framesToPop",47,48,"_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","auth","signedIn","signedOut","_react","_react2","_class","_React$Component","getPrototypeOf","reload","interpolate","gettext","username","className","getClassName","getMessage","type","onClick","refresh","Component","react",49,"BASE_URL","size","url","id","avatar_hash","src","getSrc",50,"html","dangerouslySetInnerHTML","__html","plain","expires","isAfter","expires_on","fromNow","getReasonMessage","getExpirationMessage",51,"_loader","_loader2","Button","disabled","loading","children","defaultProps","./loader",52,"_avatar","_button","_button2","cropAvatar","isLoading","avatarType","upload","cropit","post","api_url","avatar","crop","offset","zoom","then","data","onComplete","success","detail","rejection","status","showError","crop_tmp","crop_org","secret","getAvatarSecret","getAvatarHash","join","_this2","width","getAvatarSize","height","imageState","getImagePath","onImageLoaded","zoomLevel","imageSize","displayedWidth","offsetX","y","displayedHeight","offsetY","showIndex","../../services/ajax","../../services/snackbar","../avatar","../button",53,"Gallery","GalleryItem","_batch","_batch2","_Object$getPrototypeO","_temp","_ret","_len","_key","image","selection","_React$Component2","_this3","images","map","row","_React$Component3","_this4","save","response","_this5","galleries","../../index","../../utils/batch",54,"_avatar2","setGravatar","callApi","setGenerated","gravatar","showCrop","showUpload","showGallery","getAvatarPreview","getGravatarButton","getCropButton","getUploadButton","getGalleryButton","../loader",55,"ChangeAvatarError","_crop","_crop2","_upload","_upload2","_gallery","_gallery2","_modalLoader","_modalLoader2","reason","getErrorReason","completeFlow","avatarHash","updateAvatar","role","data-dismiss","aria-label","aria-hidden","getBody","../../reducers/users","../../services/store","../modal-loader","./crop","./gallery","./index","./upload",56,"_fileSize","_fileSize2","pickFile","click","uploadFile","files","validationError","validateFile","preview","URL","createObjectURL","progress","FormData","append","uploaded","info","limit","filesize","invalidTypeMsg","allowed_mime_types","extensionFound","loweredFilename","toLowerCase","allowed_extensions","extension","extensions","getUploadRequirements","aria-valuenow","aria-valuemin","aria-valuemax","style","getUploadProgressLabel","onChange","getUploadProgress","renderCrop","renderUpload","../../utils/file-size",57,"validation","isValidated","helpText","labelClass","htmlFor","label","controlClass","getFeedbackIcon","getFeedbackDescription","getFeedback","getHelpText","extra",58,"_defineProperty","_validators","validateRequired","required","bindInput","newState","formErrors","errors","validateField","handleSubmit","preventDefault","clean","promise","send","handleSuccess","handleError","validators","optional","validatedFields","fieldErrors","validate","field","requiredError","../utils/validators",59,"isActive","activeClassName",60,61,62,"_interopRequireWildcard","newObj","UsernameHistory","ChangeUsernameLoading","NoChangesLeft","ChangeUsername","_form","_form2","_formGroup","_formGroup2","_random","_Form","usernameContent","usernameMinLength","username_length_min","length_min","usernameMaxLength","username_length_max","length_max","phrases","changes_left","ngettext","acl","name_changes_expire","trim","complete","slug","apiError","onSubmit","for","next_on","next_change","changed_by","absolute_url","changed_by_username","changes","renderUserAvatar","renderUsername","old_username","new_username","changed_on","range","isLoaded","renderHistory","renderEmptyHistory","renderHistoryPreview","_React$Component4","_this6","addNameChange","updateUsername","_this7","set","parent","Promise","all","dehydrate","results","getChangeForm","../../reducers/username-history","../../services/page-title","../../utils/random","../../utils/validators","../form","../form-group",63,"_select","_select2","_yesNoSwitch","_yesNoSwitch2","is_hiding_presence","limits_private_thread_invites_to","subscribe_to_started_threads","subscribe_to_replied_threads","privateThreadInvitesChoices","icon","subscribeToChoices","patchUser","iconOn","iconOff","labelOn","labelOff","choices","../../reducers/auth","../select","../yes-no-switch",64,"CompactNav","SideNav","_reactRouter","_li","_li2","option","Link","to","baseUrl","../li","react-router",65,"store","tick","username-history","_forumOptions2","_changeUsername2","_signInCredentials2","_navs","_forumOptions","_changeUsername","_signInCredentials","toggleNav","dropdown","aria-haspopup","aria-expanded","getCompactNavClassName","./change-username","./forum-options","./navs","./sign-in-credentials",66,"ChangePassword","ChangeEmail","new_email","password","email","lengths","change_email","display","_Form2","new_password","repeat_password","passwordMinLength","change_password",67,"LABELS","STYLES","_score","_password","_inputs","inputs","cacheStale","scorePassword","score","getScore","../services/zxcvbn",68,"_register","_register2","showRegisterModal","account_activation","show","load","../services/captcha","../services/modal","../services/snackbar","./register.js",69,"RegisterComplete","RegisterForm","_passwordStrength","_passwordStrength2","captcha","validator","isValid","apiResponse","ban","hide","aria-describedby","form","getLegalFootNote","activation","getLead","getSubscript","completeRegistration","signIn","../index","../services/ajax","../services/auth","../utils/banned-page","./button","./form","./form-group","./password-strength",70,"LinkSent","RequestLinkForm","placeholder","reset",71,"AccountInactivePage","RequestResetForm","_reactDom","_reactDom2","showInactivePage","getActivateButton","render","react-dom",72,"PasswordChangedPage","ResetPasswordForm","_signIn","_signIn2","showSignIn","softSignOut","remove","./sign-in.js",73,"change","choice","getChoice","data-toggle","getIcon","getLabel",74,"showActivation","find","val","getCsrfToken","submit","getActivationButton",75,"snackbar","TYPES_CLASSES","snackbarClass","isVisible","getSnackbarClass",76,"CompactGuestNav","GuestNav","GuestMenu","_registerButton","_registerButton2","showSignInModal","_GuestMenu","showGuestMenu","../../services/mobile-navbar-dropdown","../../services/modal","../register-button","../sign-in.js",77,"_guestNav","_userNav","UserNav","CompactUserNav","./guest-nav","./user-nav",78,"selectUserMenu","decision","changeAvatar","logout","showConnected","showUserMenu","../change-avatar/root",79,"StatusLabel","StatusIcon","is_banned","is_hidden","is_online_hidden","is_offline_hidden","is_online","is_offline","getClass","banned_until","ban_expires","last_click","getHelp",80,"NoActivePosters","ActivePostersLoading","ActivePosters","ActivePoster","_userStatus","_userStatus2","rank","css_class","is_tab","rankUrl","getUserStatus","getRankName","getUserTitle","counter","meta","posts","count","posters","days","trackedPeriod","getLeadMessage","users","getEmptyMessage","_React$Component5","initWithPreloadedData","pop","initWithoutPreloadedData","poolId","startPooling","tracked_period","poolServer","list","route","../user-status",81,"TabsNav","listUrl","navLinks","lists",82,83,"_rank2","description","_activePosters2","_activePosters","_rank","./active-posters","./rank",84,"toggle",85,"./utils/ordered-list",86,"patch","PATCH_USER","SIGN_IN","signOut","soft","SIGN_OUT","UPDATE_AVATAR","userId","_newState","UPDATE_USERNAME","_newState2","./users",87,"showSnackbar","SHOW_SNACKBAR","messageType","hideSnackbar","HIDE_SNACKBAR",88,"TICK",89,"changedBy","ADD_NAME_CHANGE","items","DEHYDRATE_RESULT","unshift","floor","now",90,91,"Ajax","_cookieName","_csrfToken","cookieName","cookie","cookieRegex","RegExp","method","resolve","reject","xhr","headers","X-CSRFToken","contentType","dataType","jqXHR","responseJSON","statusText","ajax","params","param","request","processData","XMLHttpRequest","evt","lengthComputable","round","loaded","total",92,"Auth","local","modal","_local","syncSession","watchState","getState","watch","../reducers/auth",93,"Captcha","ReCaptcha","ReCaptchaComponent","QACaptcha","NoCaptcha","BaseCaptcha","include","_BaseCaptcha","_BaseCaptcha2","question","help_text","kwargs","grecaptcha","sitekey","siteKey","_BaseCaptcha3","wait","recaptcha_site_key","captcha_type","../components/form-group",94,"Include","staticUrl","_staticUrl","_included","script","remote","cache",95,"storage","localStorage","LocalStorage","prefix","_prefix","_watchers","newValueJson","newValue","watcher","oldValue","itemString",96,"MobileNavbarDropdown","_element","_component","addClass","removeClass","../utils/mount-component",97,"Modal","unmountComponentAtNode",98,"PageTitle","forumName","_forumName","finalTitle","page","pageLabel",99,"HIDE_ANIMATION_LENGTH","MESSAGE_SHOW_LENGTH","_timeout","alert","../reducers/snackbar",100,"StoreWrapper","_redux","_reducers","_initialState","reducer","createStore","combineReducers","redux",101,"Zxcvbn","zxcvbn","_loadingPromise","_loadedPromise",102,"changeState","Provider","getStore","RedrawedBannedPage","../components/banned-page","../services/store",103,"rowWidth","padding","rows",104,"bytes",105,"rootElementId","connected","rootElement",106,"OrderedList","isOrdered","_items","order","values","values_only","_order","unordered","insertItem","insertAt","ordering","ordered","splice","iterations",107,"int","min","max",108,"routes","childRoutes","onEnter","nextState","Router","_createBrowserHistory","_createBrowserHistory2","history/lib/createBrowserHistory",109,"EMAIL","test","minLength","limitValue","returnMessage","limit_value","show_value","maxLength","settings","USERNAME","password_length_min"],"mappings":"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","file":"misago.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\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 = setTimeout(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    clearTimeout(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        setTimeout(drainQueue, 0);\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;\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},{}],2:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Misago = undefined;\n\nvar _orderedList = require('../../../../documents/misago/frontend/src/utils/ordered-list');\n\nvar _orderedList2 = _interopRequireDefault(_orderedList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Misago = exports.Misago = function () {\n  function Misago() {\n    _classCallCheck(this, Misago);\n\n    this._initializers = [];\n    this._context = {};\n  }\n\n  _createClass(Misago, [{\n    key: 'addInitializer',\n    value: function addInitializer(initializer) {\n      this._initializers.push({\n        key: initializer.name,\n\n        item: initializer.initializer,\n\n        after: initializer.after,\n        before: initializer.before\n      });\n    }\n  }, {\n    key: 'init',\n    value: function init(context) {\n      var _this = this;\n\n      this._context = context;\n\n      var initOrder = new _orderedList2.default(this._initializers).orderedValues();\n      initOrder.forEach(function (initializer) {\n        initializer(_this);\n      });\n    }\n\n    // context accessors\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      return !!this._context[key];\n    }\n  }, {\n    key: 'get',\n    value: function get(key, fallback) {\n      if (this.has(key)) {\n        return this._context[key];\n      } else {\n        return fallback || undefined;\n      }\n    }\n  }, {\n    key: 'pop',\n    value: function pop(key) {\n      if (this.has(key)) {\n        var value = this._context[key];\n        this._context[key] = null;\n        return value;\n      } else {\n        return undefined;\n      }\n    }\n  }]);\n\n  return Misago;\n}();\n\n// create  singleton\n\nvar misago = new Misago();\n\n// expose it globally\nglobal.misago = misago;\n\n// and export it for tests and stuff\nexports.default = misago;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../../../documents/misago/frontend/src/utils/ordered-list\":106}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _ajax2.default.init(_index2.default.get('CSRF_COOKIE_NAME'));\n}\n\n_index2.default.addInitializer({\n  name: 'ajax',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/ajax\":91}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _authMessage = require('../../../../../documents/misago/frontend/src/components/auth-message');\n\nvar _authMessage2 = _interopRequireDefault(_authMessage);\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_authMessage.select)(_authMessage2.default), 'auth-message-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:auth-message',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/auth-message\":48,\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/utils/mount-component\":105,\"react-redux\":\"react-redux\"}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _auth = require('../../../../../documents/misago/frontend/src/reducers/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _store2.default.addReducer('auth', _auth2.default, Object.assign({\n    'isAuthenticated': context.get('isAuthenticated'),\n    'isAnonymous': !context.get('isAuthenticated'),\n\n    'user': context.get('user')\n  }, _auth.initialState));\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:auth',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/reducers/auth\":86,\"../../../../../documents/misago/frontend/src/services/store\":100}],6:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _auth = require('../../../../../documents/misago/frontend/src/services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _modal = require('../../../../../documents/misago/frontend/src/services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _auth2.default.init(_store2.default, _localStorage2.default, _modal2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'auth',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/auth\":92,\"../../../../../documents/misago/frontend/src/services/local-storage\":95,\"../../../../../documents/misago/frontend/src/services/modal\":97,\"../../../../../documents/misago/frontend/src/services/store\":100}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _bannedPage = require('../../../../../documents/misago/frontend/src/utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('BAN_MESSAGE')) {\n    (0, _bannedPage2.default)(context.get('BAN_MESSAGE'), false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:baned-page',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/utils/banned-page\":102}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _captcha = require('../../../../../documents/misago/frontend/src/services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _include = require('../../../../../documents/misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _captcha2.default.init(context, _ajax2.default, _include2.default, _snackbar2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'captcha',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/ajax\":91,\"../../../../../documents/misago/frontend/src/services/captcha\":93,\"../../../../../documents/misago/frontend/src/services/include\":94,\"../../../../../documents/misago/frontend/src/services/snackbar\":99}],9:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _include = require('../../../../../documents/misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _include2.default.init(context.get('STATIC_URL'));\n}\n\n_index2.default.addInitializer({\n  name: 'include',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/include\":94}],10:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _localStorage2.default.init('misago_');\n}\n\n_index2.default.addInitializer({\n  name: 'local-storage',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/local-storage\":95}],11:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mobileNavbarDropdown = require('../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  var element = document.getElementById('mobile-navbar-dropdown-mount');\n  if (element) {\n    _mobileNavbarDropdown2.default.init(element);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'dropdown',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown\":96}],12:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _modal = require('../../../../../documents/misago/frontend/src/services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  var element = document.getElementById('modal-mount');\n  if (element) {\n    _modal2.default.init(element);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'modal',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/modal\":97}],13:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _moment2.default.locale($('html').attr('lang'));\n}\n\n_index2.default.addInitializer({\n  name: 'moment',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"moment\":\"moment\"}],14:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _root = require('../../../../../documents/misago/frontend/src/components/options/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _routedComponent = require('../../../../../documents/misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('USER_OPTIONS')) {\n    (0, _routedComponent2.default)({\n      root: _index2.default.get('USERCP_URL'),\n      component: _root2.default,\n      paths: (0, _root.paths)(_store2.default)\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:options',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/options/root\":65,\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/store\":100,\"../../../../../documents/misago/frontend/src/utils/routed-component\":108}],15:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _pageTitle = require('../../../../../documents/misago/frontend/src/services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _pageTitle2.default.init(context.get('SETTINGS').forum_name);\n}\n\n_index2.default.addInitializer({\n  name: 'page-title',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/page-title\":98}],16:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _requestActivationLink = require('../../../../../documents/misago/frontend/src/components/request-activation-link');\n\nvar _requestActivationLink2 = _interopRequireDefault(_requestActivationLink);\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('request-activation-link-mount')) {\n    (0, _mountComponent2.default)(_requestActivationLink2.default, 'request-activation-link-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:request-activation-link',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/request-activation-link\":70,\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/utils/mount-component\":105}],17:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _requestPasswordReset = require('../../../../../documents/misago/frontend/src/components/request-password-reset');\n\nvar _requestPasswordReset2 = _interopRequireDefault(_requestPasswordReset);\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('request-password-reset-mount')) {\n    (0, _mountComponent2.default)(_requestPasswordReset2.default, 'request-password-reset-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:request-password-reset',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/request-password-reset\":71,\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/utils/mount-component\":105}],18:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _resetPasswordForm = require('../../../../../documents/misago/frontend/src/components/reset-password-form');\n\nvar _resetPasswordForm2 = _interopRequireDefault(_resetPasswordForm);\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('reset-password-form-mount')) {\n    (0, _mountComponent2.default)(_resetPasswordForm2.default, 'reset-password-form-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:reset-password-form',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/reset-password-form\":72,\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/utils/mount-component\":105}],19:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/components/snackbar');\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_snackbar.select)(_snackbar.Snackbar), 'snackbar-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:snackbar',\n  initializer: initializer,\n  after: 'snackbar'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/snackbar\":75,\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/utils/mount-component\":105,\"react-redux\":\"react-redux\"}],20:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/reducers/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('snackbar', _snackbar2.default, _snackbar.initialState);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:snackbar',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/reducers/snackbar\":87,\"../../../../../documents/misago/frontend/src/services/store\":100}],21:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _snackbar2.default.init(_store2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'snackbar',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/snackbar\":99,\"../../../../../documents/misago/frontend/src/services/store\":100}],22:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.init();\n}\n\n_index2.default.addInitializer({\n  name: 'store',\n  initializer: initializer,\n  before: '_end'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/store\":100}],23:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _tick = require('../../../../../documents/misago/frontend/src/reducers/tick');\n\nvar _tick2 = _interopRequireDefault(_tick);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('tick', _tick2.default, _tick.initialState);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:tick',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/reducers/tick\":88,\"../../../../../documents/misago/frontend/src/services/store\":100}],24:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _tick = require('../../../../../documents/misago/frontend/src/reducers/tick');\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TICK_PERIOD = 50 * 1000; //do the tick every 50s\n\nfunction initializer() {\n  window.setInterval(function () {\n    _store2.default.dispatch((0, _tick.doTick)());\n  }, TICK_PERIOD);\n}\n\n_index2.default.addInitializer({\n  name: 'tick-start',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/reducers/tick\":88,\"../../../../../documents/misago/frontend/src/services/store\":100}],25:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _root = require('../../../../../documents/misago/frontend/src/components/user-menu/root');\n\nvar _mountComponent = require('../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.UserMenu), 'user-menu-mount');\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.CompactUserMenu), 'user-menu-compact-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:user-menu',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/user-menu/root\":77,\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/utils/mount-component\":105,\"react-redux\":\"react-redux\"}],26:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory = require('../../../../../documents/misago/frontend/src/reducers/username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('username-history', _usernameHistory2.default, []);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:username-history',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/reducers/username-history\":89,\"../../../../../documents/misago/frontend/src/services/store\":100}],27:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _root = require('../../../../../documents/misago/frontend/src/components/users/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _routedComponent = require('../../../../../documents/misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('USERS_LISTS')) {\n    (0, _routedComponent2.default)({\n      root: _index2.default.get('USERS_LIST_URL'),\n      component: _root2.default,\n      paths: (0, _root.paths)(_store2.default)\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:users',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/components/users/root\":83,\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/store\":100,\"../../../../../documents/misago/frontend/src/utils/routed-component\":108}],28:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../../../../documents/misago/frontend/src/reducers/users');\n\nvar _users2 = _interopRequireDefault(_users);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('users', _users2.default, []);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:users',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/reducers/users\":90,\"../../../../../documents/misago/frontend/src/services/store\":100}],29:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _include = require('../../../../../documents/misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nvar _zxcvbn = require('../../../../../documents/misago/frontend/src/services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _zxcvbn2.default.init(_include2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'zxcvbn',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":85,\"../../../../../documents/misago/frontend/src/services/include\":94,\"../../../../../documents/misago/frontend/src/services/zxcvbn\":101}],30:[function(require,module,exports){\nvar pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n\n},{\"./lib/is_arguments.js\":31,\"./lib/keys.js\":32}],31:[function(require,module,exports){\nvar supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n\n},{}],32:[function(require,module,exports){\nexports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n\n},{}],33:[function(require,module,exports){\n/**\n * Indicates that navigation was caused by a call to history.push.\n */\n'use strict';\n\nexports.__esModule = true;\nvar PUSH = 'PUSH';\n\nexports.PUSH = PUSH;\n/**\n * Indicates that navigation was caused by a call to history.replace.\n */\nvar REPLACE = 'REPLACE';\n\nexports.REPLACE = REPLACE;\n/**\n * Indicates that navigation was caused by some other action such\n * as using a browser's back/forward buttons and/or manually manipulating\n * the URL in a browser's location bar. This is the default.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate\n * for more information.\n */\nvar POP = 'POP';\n\nexports.POP = POP;\nexports['default'] = {\n  PUSH: PUSH,\n  REPLACE: REPLACE,\n  POP: POP\n};\n},{}],34:[function(require,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\nexports.loopAsync = loopAsync;\n\nfunction loopAsync(turns, work, callback) {\n  var currentTurn = 0;\n  var isDone = false;\n\n  function done() {\n    isDone = true;\n    callback.apply(this, arguments);\n  }\n\n  function next() {\n    if (isDone) return;\n\n    if (currentTurn < turns) {\n      work.call(this, currentTurn++, next, done);\n    } else {\n      done.apply(this, arguments);\n    }\n  }\n\n  next();\n}\n},{}],35:[function(require,module,exports){\n(function (process){\n/*eslint-disable no-empty */\n'use strict';\n\nexports.__esModule = true;\nexports.saveState = saveState;\nexports.readState = readState;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar KeyPrefix = '@@History/';\nvar QuotaExceededError = 'QuotaExceededError';\nvar SecurityError = 'SecurityError';\n\nfunction createKey(key) {\n  return KeyPrefix + key;\n}\n\nfunction saveState(key, state) {\n  try {\n    window.sessionStorage.setItem(createKey(key), JSON.stringify(state));\n  } catch (error) {\n    if (error.name === SecurityError) {\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n      // attempt to access window.sessionStorage.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;\n\n      return;\n    }\n\n    if (error.name === QuotaExceededError && window.sessionStorage.length === 0) {\n      // Safari \"private mode\" throws QuotaExceededError.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;\n\n      return;\n    }\n\n    throw error;\n  }\n}\n\nfunction readState(key) {\n  var json = undefined;\n  try {\n    json = window.sessionStorage.getItem(createKey(key));\n  } catch (error) {\n    if (error.name === SecurityError) {\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n      // attempt to access window.sessionStorage.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;\n\n      return null;\n    }\n  }\n\n  if (json) {\n    try {\n      return JSON.parse(json);\n    } catch (error) {\n      // Ignore invalid JSON.\n    }\n  }\n\n  return null;\n}\n}).call(this,require('_process'))\n},{\"_process\":1,\"warning\":47}],36:[function(require,module,exports){\n'use strict';\n\nexports.__esModule = true;\nexports.addEventListener = addEventListener;\nexports.removeEventListener = removeEventListener;\nexports.getHashPath = getHashPath;\nexports.replaceHashPath = replaceHashPath;\nexports.getWindowPath = getWindowPath;\nexports.go = go;\nexports.getUserConfirmation = getUserConfirmation;\nexports.supportsHistory = supportsHistory;\nexports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;\n\nfunction addEventListener(node, event, listener) {\n  if (node.addEventListener) {\n    node.addEventListener(event, listener, false);\n  } else {\n    node.attachEvent('on' + event, listener);\n  }\n}\n\nfunction removeEventListener(node, event, listener) {\n  if (node.removeEventListener) {\n    node.removeEventListener(event, listener, false);\n  } else {\n    node.detachEvent('on' + event, listener);\n  }\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  return window.location.href.split('#')[1] || '';\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(window.location.pathname + window.location.search + '#' + path);\n}\n\nfunction getWindowPath() {\n  return window.location.pathname + window.location.search + window.location.hash;\n}\n\nfunction go(n) {\n  if (n) window.history.go(n);\n}\n\nfunction getUserConfirmation(message, callback) {\n  callback(window.confirm(message));\n}\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {\n    return false;\n  }\n  // FIXME: Work around our browser history not working correctly on Chrome\n  // iOS: https://github.com/rackt/react-router/issues/2565\n  if (ua.indexOf('CriOS') !== -1) {\n    return false;\n  }\n  return window.history && 'pushState' in window.history;\n}\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  var ua = navigator.userAgent;\n  return ua.indexOf('Firefox') === -1;\n}\n},{}],37:[function(require,module,exports){\n'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexports.canUseDOM = canUseDOM;\n},{}],38:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _Actions = require('./Actions');\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _DOMStateStorage = require('./DOMStateStorage');\n\nvar _createDOMHistory = require('./createDOMHistory');\n\nvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\n/**\n * Creates and returns a history object that uses HTML5's history API\n * (pushState, replaceState, and the popstate event) to manage history.\n * This is the recommended method of managing history in browsers because\n * it provides the cleanest URLs.\n *\n * Note: In browsers that do not support the HTML5 history API full\n * page reloads will be used to preserve URLs.\n */\nfunction createBrowserHistory() {\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n  !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;\n\n  var forceRefresh = options.forceRefresh;\n\n  var isSupported = _DOMUtils.supportsHistory();\n  var useRefresh = !isSupported || forceRefresh;\n\n  function getCurrentLocation(historyState) {\n    historyState = historyState || window.history.state || {};\n\n    var path = _DOMUtils.getWindowPath();\n    var _historyState = historyState;\n    var key = _historyState.key;\n\n    var state = undefined;\n    if (key) {\n      state = _DOMStateStorage.readState(key);\n    } else {\n      state = null;\n      key = history.createKey();\n\n      if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path);\n    }\n\n    var location = _parsePath2['default'](path);\n\n    return history.createLocation(_extends({}, location, { state: state }), undefined, key);\n  }\n\n  function startPopStateListener(_ref) {\n    var transitionTo = _ref.transitionTo;\n\n    function popStateListener(event) {\n      if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.\n\n      transitionTo(getCurrentLocation(event.state));\n    }\n\n    _DOMUtils.addEventListener(window, 'popstate', popStateListener);\n\n    return function () {\n      _DOMUtils.removeEventListener(window, 'popstate', popStateListener);\n    };\n  }\n\n  function finishTransition(location) {\n    var basename = location.basename;\n    var pathname = location.pathname;\n    var search = location.search;\n    var hash = location.hash;\n    var state = location.state;\n    var action = location.action;\n    var key = location.key;\n\n    if (action === _Actions.POP) return; // Nothing to do.\n\n    _DOMStateStorage.saveState(key, state);\n\n    var path = (basename || '') + pathname + search + hash;\n    var historyState = {\n      key: key\n    };\n\n    if (action === _Actions.PUSH) {\n      if (useRefresh) {\n        window.location.href = path;\n        return false; // Prevent location update.\n      } else {\n          window.history.pushState(historyState, null, path);\n        }\n    } else {\n      // REPLACE\n      if (useRefresh) {\n        window.location.replace(path);\n        return false; // Prevent location update.\n      } else {\n          window.history.replaceState(historyState, null, path);\n        }\n    }\n  }\n\n  var history = _createDOMHistory2['default'](_extends({}, options, {\n    getCurrentLocation: getCurrentLocation,\n    finishTransition: finishTransition,\n    saveState: _DOMStateStorage.saveState\n  }));\n\n  var listenerCount = 0,\n      stopPopStateListener = undefined;\n\n  function listenBefore(listener) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    var unlisten = history.listenBefore(listener);\n\n    return function () {\n      unlisten();\n\n      if (--listenerCount === 0) stopPopStateListener();\n    };\n  }\n\n  function listen(listener) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    var unlisten = history.listen(listener);\n\n    return function () {\n      unlisten();\n\n      if (--listenerCount === 0) stopPopStateListener();\n    };\n  }\n\n  // deprecated\n  function registerTransitionHook(hook) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    history.registerTransitionHook(hook);\n  }\n\n  // deprecated\n  function unregisterTransitionHook(hook) {\n    history.unregisterTransitionHook(hook);\n\n    if (--listenerCount === 0) stopPopStateListener();\n  }\n\n  return _extends({}, history, {\n    listenBefore: listenBefore,\n    listen: listen,\n    registerTransitionHook: registerTransitionHook,\n    unregisterTransitionHook: unregisterTransitionHook\n  });\n}\n\nexports['default'] = createBrowserHistory;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./Actions\":33,\"./DOMStateStorage\":35,\"./DOMUtils\":36,\"./ExecutionEnvironment\":37,\"./createDOMHistory\":39,\"./parsePath\":44,\"_process\":1,\"invariant\":46}],39:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\n\nfunction createDOMHistory(options) {\n  var history = _createHistory2['default'](_extends({\n    getUserConfirmation: _DOMUtils.getUserConfirmation\n  }, options, {\n    go: _DOMUtils.go\n  }));\n\n  function listen(listener) {\n    !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;\n\n    return history.listen(listener);\n  }\n\n  return _extends({}, history, {\n    listen: listen\n  });\n}\n\nexports['default'] = createDOMHistory;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./DOMUtils\":36,\"./ExecutionEnvironment\":37,\"./createHistory\":40,\"_process\":1,\"invariant\":46}],40:[function(require,module,exports){\n//import warning from 'warning'\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _deepEqual = require('deep-equal');\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nvar _Actions = require('./Actions');\n\nvar _createLocation2 = require('./createLocation');\n\nvar _createLocation3 = _interopRequireDefault(_createLocation2);\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\nvar _deprecate = require('./deprecate');\n\nvar _deprecate2 = _interopRequireDefault(_deprecate);\n\nfunction createRandomKey(length) {\n  return Math.random().toString(36).substr(2, length);\n}\n\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search &&\n  //a.action === b.action && // Different action !== location change.\n  a.key === b.key && _deepEqual2['default'](a.state, b.state);\n}\n\nvar DefaultKeyLength = 6;\n\nfunction createHistory() {\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n  var getCurrentLocation = options.getCurrentLocation;\n  var finishTransition = options.finishTransition;\n  var saveState = options.saveState;\n  var go = options.go;\n  var keyLength = options.keyLength;\n  var getUserConfirmation = options.getUserConfirmation;\n\n  if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;\n\n  var transitionHooks = [];\n\n  function listenBefore(hook) {\n    transitionHooks.push(hook);\n\n    return function () {\n      transitionHooks = transitionHooks.filter(function (item) {\n        return item !== hook;\n      });\n    };\n  }\n\n  var allKeys = [];\n  var changeListeners = [];\n  var location = undefined;\n\n  function getCurrent() {\n    if (pendingLocation && pendingLocation.action === _Actions.POP) {\n      return allKeys.indexOf(pendingLocation.key);\n    } else if (location) {\n      return allKeys.indexOf(location.key);\n    } else {\n      return -1;\n    }\n  }\n\n  function updateLocation(newLocation) {\n    var current = getCurrent();\n\n    location = newLocation;\n\n    if (location.action === _Actions.PUSH) {\n      allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);\n    } else if (location.action === _Actions.REPLACE) {\n      allKeys[current] = location.key;\n    }\n\n    changeListeners.forEach(function (listener) {\n      listener(location);\n    });\n  }\n\n  function listen(listener) {\n    changeListeners.push(listener);\n\n    if (location) {\n      listener(location);\n    } else {\n      var _location = getCurrentLocation();\n      allKeys = [_location.key];\n      updateLocation(_location);\n    }\n\n    return function () {\n      changeListeners = changeListeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function confirmTransitionTo(location, callback) {\n    _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {\n      _runTransitionHook2['default'](transitionHooks[index], location, function (result) {\n        if (result != null) {\n          done(result);\n        } else {\n          next();\n        }\n      });\n    }, function (message) {\n      if (getUserConfirmation && typeof message === 'string') {\n        getUserConfirmation(message, function (ok) {\n          callback(ok !== false);\n        });\n      } else {\n        callback(message !== false);\n      }\n    });\n  }\n\n  var pendingLocation = undefined;\n\n  function transitionTo(nextLocation) {\n    if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.\n\n    pendingLocation = nextLocation;\n\n    confirmTransitionTo(nextLocation, function (ok) {\n      if (pendingLocation !== nextLocation) return; // Transition was interrupted.\n\n      if (ok) {\n        // treat PUSH to current path like REPLACE to be consistent with browsers\n        if (nextLocation.action === _Actions.PUSH) {\n          var prevPath = createPath(location);\n          var nextPath = createPath(nextLocation);\n\n          if (nextPath === prevPath) nextLocation.action = _Actions.REPLACE;\n        }\n\n        if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);\n      } else if (location && nextLocation.action === _Actions.POP) {\n        var prevIndex = allKeys.indexOf(location.key);\n        var nextIndex = allKeys.indexOf(nextLocation.key);\n\n        if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.\n      }\n    });\n  }\n\n  function push(location) {\n    transitionTo(createLocation(location, _Actions.PUSH, createKey()));\n  }\n\n  function replace(location) {\n    transitionTo(createLocation(location, _Actions.REPLACE, createKey()));\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function createKey() {\n    return createRandomKey(keyLength);\n  }\n\n  function createPath(location) {\n    if (location == null || typeof location === 'string') return location;\n\n    var pathname = location.pathname;\n    var search = location.search;\n    var hash = location.hash;\n\n    var result = pathname;\n\n    if (search) result += search;\n\n    if (hash) result += hash;\n\n    return result;\n  }\n\n  function createHref(location) {\n    return createPath(location);\n  }\n\n  function createLocation(location, action) {\n    var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];\n\n    if (typeof action === 'object') {\n      //warning(\n      //  false,\n      //  'The state (2nd) argument to history.createLocation is deprecated; use a ' +\n      //  'location descriptor instead'\n      //)\n\n      if (typeof location === 'string') location = _parsePath2['default'](location);\n\n      location = _extends({}, location, { state: action });\n\n      action = key;\n      key = arguments[3] || createKey();\n    }\n\n    return _createLocation3['default'](location, action, key);\n  }\n\n  // deprecated\n  function setState(state) {\n    if (location) {\n      updateLocationState(location, state);\n      updateLocation(location);\n    } else {\n      updateLocationState(getCurrentLocation(), state);\n    }\n  }\n\n  function updateLocationState(location, state) {\n    location.state = _extends({}, location.state, state);\n    saveState(location.key, location.state);\n  }\n\n  // deprecated\n  function registerTransitionHook(hook) {\n    if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);\n  }\n\n  // deprecated\n  function unregisterTransitionHook(hook) {\n    transitionHooks = transitionHooks.filter(function (item) {\n      return item !== hook;\n    });\n  }\n\n  // deprecated\n  function pushState(state, path) {\n    if (typeof path === 'string') path = _parsePath2['default'](path);\n\n    push(_extends({ state: state }, path));\n  }\n\n  // deprecated\n  function replaceState(state, path) {\n    if (typeof path === 'string') path = _parsePath2['default'](path);\n\n    replace(_extends({ state: state }, path));\n  }\n\n  return {\n    listenBefore: listenBefore,\n    listen: listen,\n    transitionTo: transitionTo,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    createKey: createKey,\n    createPath: createPath,\n    createHref: createHref,\n    createLocation: createLocation,\n\n    setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),\n    registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),\n    unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),\n    pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\n    replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\n  };\n}\n\nexports['default'] = createHistory;\nmodule.exports = exports['default'];\n},{\"./Actions\":33,\"./AsyncUtils\":34,\"./createLocation\":41,\"./deprecate\":42,\"./parsePath\":44,\"./runTransitionHook\":45,\"deep-equal\":30}],41:[function(require,module,exports){\n//import warning from 'warning'\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _Actions = require('./Actions');\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\nfunction createLocation() {\n  var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];\n  var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\n\n  var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];\n\n  if (typeof location === 'string') location = _parsePath2['default'](location);\n\n  if (typeof action === 'object') {\n    //warning(\n    //  false,\n    //  'The state (2nd) argument to createLocation is deprecated; use a ' +\n    //  'location descriptor instead'\n    //)\n\n    location = _extends({}, location, { state: action });\n\n    action = key || _Actions.POP;\n    key = _fourthArg;\n  }\n\n  var pathname = location.pathname || '/';\n  var search = location.search || '';\n  var hash = location.hash || '';\n  var state = location.state || null;\n\n  return {\n    pathname: pathname,\n    search: search,\n    hash: hash,\n    state: state,\n    action: action,\n    key: key\n  };\n}\n\nexports['default'] = createLocation;\nmodule.exports = exports['default'];\n},{\"./Actions\":33,\"./parsePath\":44}],42:[function(require,module,exports){\n//import warning from 'warning'\n\n\"use strict\";\n\nexports.__esModule = true;\nfunction deprecate(fn) {\n  return fn;\n  //return function () {\n  //  warning(false, '[history] ' + message)\n  //  return fn.apply(this, arguments)\n  //}\n}\n\nexports[\"default\"] = deprecate;\nmodule.exports = exports[\"default\"];\n},{}],43:[function(require,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\nfunction extractPath(string) {\n  var match = string.match(/^https?:\\/\\/[^\\/]*/);\n\n  if (match == null) return string;\n\n  return string.substring(match[0].length);\n}\n\nexports[\"default\"] = extractPath;\nmodule.exports = exports[\"default\"];\n},{}],44:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _extractPath = require('./extractPath');\n\nvar _extractPath2 = _interopRequireDefault(_extractPath);\n\nfunction parsePath(path) {\n  var pathname = _extractPath2['default'](path);\n  var search = '';\n  var hash = '';\n\n  process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like \"%s\"', path) : undefined;\n\n  var hashIndex = pathname.indexOf('#');\n  if (hashIndex !== -1) {\n    hash = pathname.substring(hashIndex);\n    pathname = pathname.substring(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n  if (searchIndex !== -1) {\n    search = pathname.substring(searchIndex);\n    pathname = pathname.substring(0, searchIndex);\n  }\n\n  if (pathname === '') pathname = '/';\n\n  return {\n    pathname: pathname,\n    search: search,\n    hash: hash\n  };\n}\n\nexports['default'] = parsePath;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./extractPath\":43,\"_process\":1,\"warning\":47}],45:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction runTransitionHook(hook, location, callback) {\n  var result = hook(location, callback);\n\n  if (hook.length < 2) {\n    // Assume the hook runs synchronously and automatically\n    // call the callback with the return value.\n    callback(result);\n  } else {\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not \"return\" in a transition hook with a callback argument; call the callback instead') : undefined;\n  }\n}\n\nexports['default'] = runTransitionHook;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"_process\":1,\"warning\":47}],46:[function(require,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (\"production\" !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n\n},{}],47:[function(require,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (\"production\" !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n\n},{}],48:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"refresh\",\n    value: function refresh() {\n      window.location.reload();\n    }\n  }, {\n    key: \"getMessage\",\n    value: function getMessage() {\n      if (this.props.signedIn) {\n        return interpolate(gettext(\"You have signed in as %(username)s. Please refresh the page before continuing.\"), { username: this.props.signedIn.username }, true);\n      } else if (this.props.signedOut) {\n        return interpolate(gettext(\"%(username)s, you have been signed out. Please refresh the page before continuing.\"), { username: this.props.user.username }, true);\n      }\n    }\n  }, {\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.signedIn || this.props.signedOut) {\n        return \"auth-message show\";\n      } else {\n        return \"auth-message\";\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          \"div\",\n          { className: \"container\" },\n          _react2.default.createElement(\n            \"p\",\n            { className: \"lead\" },\n            this.getMessage()\n          ),\n          _react2.default.createElement(\n            \"p\",\n            null,\n            _react2.default.createElement(\n              \"button\",\n              { type: \"button\", className: \"btn btn-default\",\n                onClick: this.refresh },\n              gettext(\"Reload page\")\n            ),\n            \" \",\n            _react2.default.createElement(\n              \"span\",\n              { className: \"hidden-xs hidden-sm text-muted\" },\n              gettext(\"or press F5 key.\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(state) {\n  return {\n    user: state.auth.user,\n    signedIn: state.auth.signedIn,\n    signedOut: state.auth.signedOut\n  };\n}\n\n},{\"react\":\"react\"}],49:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_URL = $('base').attr('href') + 'user-avatar/';\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getSrc',\n    value: function getSrc() {\n      var size = this.props.size || 100; // jshint ignore:line\n      var url = BASE_URL;\n\n      if (this.props.user && this.props.user.id) {\n        // just avatar hash, size and user id\n        url += this.props.user.avatar_hash + '/' + size + '/' + this.props.user.id + '.png';\n      } else {\n        // just append avatar size to file to produce no-avatar placeholder\n        url += size + '.png';\n      }\n\n      return url;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement('img', { src: this.getSrc(),\n        className: this.props.className || 'user-avatar',\n        title: gettext(\"User avatar\") });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],50:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getReasonMessage',\n    value: function getReasonMessage() {\n      /* jshint ignore:start */\n      if (this.props.message.html) {\n        return _react2.default.createElement('div', { className: 'lead',\n          dangerouslySetInnerHTML: { __html: this.props.message.html } });\n      } else {\n        return _react2.default.createElement(\n          'p',\n          { className: 'lead' },\n          this.props.message.plain\n        );\n      }\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getExpirationMessage',\n    value: function getExpirationMessage() {\n      if (this.props.expires) {\n        if (this.props.expires.isAfter((0, _moment2.default)())) {\n          return interpolate(gettext(\"This ban expires %(expires_on)s.\"), { 'expires_on': this.props.expires.fromNow() }, true);\n        } else {\n          return gettext(\"This ban has expired.\");\n        }\n      } else {\n        return gettext(\"This ban is permanent.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-error page-error-banned' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'highlight_off'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              this.getReasonMessage(),\n              _react2.default.createElement(\n                'p',\n                { className: 'message-footnote' },\n                this.getExpirationMessage()\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"moment\":\"moment\",\"react\":\"react\"}],51:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar Button = function (_React$Component) {\n  _inherits(Button, _React$Component);\n\n  function Button() {\n    _classCallCheck(this, Button);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Button).apply(this, arguments));\n  }\n\n  _createClass(Button, [{\n    key: 'render',\n    value: function render() {\n      var className = 'btn ' + this.props.className;\n      var disabled = this.props.disabled;\n\n      if (this.props.loading) {\n        className += ' btn-loading';\n        disabled = true;\n      }\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: this.props.onClick ? 'button' : 'submit',\n          className: className,\n          disabled: disabled,\n          onClick: this.props.onClick },\n        this.props.children,\n        this.props.loading ? _react2.default.createElement(_loader2.default, null) : null\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Button;\n}(_react2.default.Component);\n\nexports.default = Button;\n\nButton.defaultProps = {\n  className: \"btn-default\",\n\n  type: \"submit\",\n\n  loading: false,\n  disabled: false,\n\n  onClick: null\n};\n\n},{\"./loader\":60,\"react\":\"react\"}],52:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar BASE_URL = $('base').attr('href') + 'user-avatar';\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.cropAvatar = function () {\n      if (_this.state.isLoading) {\n        return false;\n      }\n\n      _this.setState({\n        'isLoading': true\n      });\n\n      var avatarType = _this.props.upload ? 'crop_tmp' : 'crop_org';\n      var cropit = $('.crop-form');\n\n      _ajax2.default.post(_this.props.user.api_url.avatar, {\n        'avatar': avatarType,\n        'crop': {\n          'offset': cropit.cropit('offset'),\n          'zoom': cropit.cropit('zoom')\n        }\n      }).then(function (data) {\n        _this.props.onComplete(data.avatar_hash, data.options);\n        _snackbar2.default.success(data.detail);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this.setState({\n            'isLoading': false\n          });\n        } else {\n          _this.props.showError(rejection);\n        }\n      });\n    };\n\n    _this.state = {\n      'isLoading': false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getAvatarSize',\n    value: function getAvatarSize() {\n      if (this.props.upload) {\n        return this.props.options.crop_tmp.size;\n      } else {\n        return this.props.options.crop_org.size;\n      }\n    }\n  }, {\n    key: 'getAvatarSecret',\n    value: function getAvatarSecret() {\n      if (this.props.upload) {\n        return this.props.options.crop_tmp.secret;\n      } else {\n        return this.props.options.crop_org.secret;\n      }\n    }\n  }, {\n    key: 'getAvatarHash',\n    value: function getAvatarHash() {\n      return this.props.upload || this.props.user.avatar_hash;\n    }\n  }, {\n    key: 'getImagePath',\n    value: function getImagePath() {\n      return [BASE_URL, this.getAvatarSecret() + ':' + this.getAvatarHash(), this.props.user.id + '.png'].join('/');\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      var cropit = $('.crop-form');\n      cropit.width(this.getAvatarSize());\n\n      cropit.cropit({\n        'width': this.getAvatarSize(),\n        'height': this.getAvatarSize(),\n        'imageState': {\n          'src': this.getImagePath()\n        },\n        onImageLoaded: function onImageLoaded() {\n          if (_this2.props.upload) {\n            // center uploaded image\n            var zoomLevel = cropit.cropit('zoom');\n            var imageSize = cropit.cropit('imageSize');\n\n            // is it wider than taller?\n            if (imageSize.width > imageSize.height) {\n              var displayedWidth = imageSize.width * zoomLevel;\n              var offsetX = (displayedWidth - _this2.getAvatarSize()) / -2;\n\n              cropit.cropit('offset', {\n                'x': offsetX,\n                'y': 0\n              });\n            } else if (imageSize.width < imageSize.height) {\n              var displayedHeight = imageSize.height * zoomLevel;\n              var offsetY = (displayedHeight - _this2.getAvatarSize()) / -2;\n\n              cropit.cropit('offset', {\n                'x': 0,\n                'y': offsetY\n              });\n            }\n          } else {\n            // use preserved crop\n            var crop = _this2.props.options.crop_org.crop;\n            if (crop) {\n              cropit.cropit('zoom', crop.zoom);\n              cropit.cropit('offset', {\n                'x': crop.x,\n                'y': crop.y\n              });\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      $('.crop-form').cropit('disable');\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body modal-avatar-crop' },\n          _react2.default.createElement(\n            'div',\n            { className: 'crop-form' },\n            _react2.default.createElement('div', { className: 'cropit-image-preview' }),\n            _react2.default.createElement('input', { type: 'range', className: 'cropit-image-zoom-input' })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-6 col-md-offset-3' },\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.cropAvatar,\n                loading: this.state.isLoading,\n                className: 'btn-primary btn-block' },\n              this.props.upload ? gettext(\"Set avatar\") : gettext(\"Crop image\")\n            ),\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.props.showIndex,\n                disabled: this.state.isLoading,\n                className: 'btn-default btn-block' },\n              gettext(\"Cancel\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":91,\"../../services/snackbar\":99,\"../avatar\":49,\"../button\":51,\"react\":\"react\"}],53:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Gallery = exports.GalleryItem = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _batch = require('../../utils/batch');\n\nvar _batch2 = _interopRequireDefault(_batch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar GalleryItem = exports.GalleryItem = function (_React$Component) {\n  _inherits(GalleryItem, _React$Component);\n\n  function GalleryItem() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, GalleryItem);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(GalleryItem)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.select = function () {\n      _this.props.select(_this.props.image);\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(GalleryItem, [{\n    key: 'getClassName',\n\n    /* jshint ignore:end */\n\n    value: function getClassName() {\n      if (this.props.selection === this.props.image) {\n        if (this.props.disabled) {\n          return 'btn btn-avatar btn-disabled avatar-selected';\n        } else {\n          return 'btn btn-avatar avatar-selected';\n        }\n      } else if (this.props.disabled) {\n        return 'btn btn-avatar btn-disabled';\n      } else {\n        return 'btn btn-avatar';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button',\n          className: this.getClassName(),\n          disabled: this.props.disabled,\n          onClick: this.select },\n        _react2.default.createElement('img', { src: _index2.default.get('MEDIA_URL') + this.props.image })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GalleryItem;\n}(_react2.default.Component);\n\nvar Gallery = exports.Gallery = function (_React$Component2) {\n  _inherits(Gallery, _React$Component2);\n\n  function Gallery() {\n    _classCallCheck(this, Gallery);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Gallery).apply(this, arguments));\n  }\n\n  _createClass(Gallery, [{\n    key: 'render',\n    value: function render() {\n      var _this3 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'avatars-gallery' },\n        _react2.default.createElement(\n          'h3',\n          null,\n          this.props.name\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'avatars-gallery-images' },\n          (0, _batch2.default)(this.props.images, 4, null).map(function (row, i) {\n            return _react2.default.createElement(\n              'div',\n              { className: 'row', key: i },\n              row.map(function (item, i) {\n                return _react2.default.createElement(\n                  'div',\n                  { className: 'col-xs-3', key: i },\n                  item ? _react2.default.createElement(GalleryItem, { image: item,\n                    disabled: _this3.props.disabled,\n                    select: _this3.props.select,\n                    selection: _this3.props.selection }) : _react2.default.createElement('div', { className: 'blank-avatar' })\n                );\n              })\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Gallery;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component3) {\n  _inherits(_class, _React$Component3);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this4.select = function (image) {\n      _this4.setState({\n        selection: image\n      });\n    };\n\n    _this4.save = function () {\n      if (_this4.state.isLoading) {\n        return false;\n      }\n\n      _this4.setState({\n        'isLoading': true\n      });\n\n      _ajax2.default.post(_this4.props.user.api_url.avatar, {\n        avatar: 'galleries',\n        image: _this4.state.selection\n      }).then(function (response) {\n        _this4.setState({\n          'isLoading': false\n        });\n\n        _snackbar2.default.success(response.detail);\n        _this4.props.onComplete(response.avatar_hash, response.options);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this4.setState({\n            'isLoading': false\n          });\n        } else {\n          _this4.props.showError(rejection);\n        }\n      });\n    };\n\n    _this4.state = {\n      'selection': null,\n      'isLoading': false\n    };\n    return _this4;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      var _this5 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body modal-avatar-gallery' },\n          this.props.options.galleries.map(function (item, i) {\n            return _react2.default.createElement(Gallery, { name: item.name,\n              images: item.images,\n              selection: _this5.state.selection,\n              disabled: _this5.state.isLoading,\n              select: _this5.select,\n              key: i });\n          })\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-6 col-md-offset-3' },\n              _react2.default.createElement(\n                _button2.default,\n                { onClick: this.save,\n                  loading: this.state.isLoading,\n                  disabled: !this.state.selection,\n                  className: 'btn-primary btn-block' },\n                this.state.selection ? gettext(\"Save choice\") : gettext(\"Select avatar\")\n              ),\n              _react2.default.createElement(\n                _button2.default,\n                { onClick: this.props.showIndex,\n                  disabled: this.state.isLoading,\n                  className: 'btn-default btn-block' },\n                gettext(\"Cancel\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":85,\"../../services/ajax\":91,\"../../services/snackbar\":99,\"../../utils/batch\":103,\"../button\":51,\"react\":\"react\"}],54:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _loader = require('../loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.setGravatar = function () {\n      _this.callApi('gravatar');\n    };\n\n    _this.setGenerated = function () {\n      _this.callApi('generated');\n    };\n\n    _this.state = {\n      'isLoading': false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'callApi',\n    value: function callApi(avatarType) {\n      var _this2 = this;\n\n      if (this.state.isLoading) {\n        return false;\n      }\n\n      this.setState({\n        'isLoading': true\n      });\n\n      _ajax2.default.post(this.props.user.api_url.avatar, {\n        avatar: avatarType\n      }).then(function (response) {\n        _this2.setState({\n          'isLoading': false\n        });\n\n        _snackbar2.default.success(response.detail);\n        _this2.props.onComplete(response.avatar_hash, response.options);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this2.setState({\n            'isLoading': false\n          });\n        } else {\n          _this2.props.showError(rejection);\n        }\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getGravatarButton',\n\n    /* jshint ignore:end */\n\n    value: function getGravatarButton() {\n      if (this.props.options.gravatar) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.setGravatar,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-gravatar' },\n          gettext(\"Download my Gravatar\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getCropButton',\n    value: function getCropButton() {\n      if (this.props.options.crop_org) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showCrop,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-crop' },\n          gettext(\"Re-crop uploaded image\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getUploadButton',\n    value: function getUploadButton() {\n      if (this.props.options.upload) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showUpload,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-upload' },\n          gettext(\"Upload new image\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getGalleryButton',\n    value: function getGalleryButton() {\n      if (this.props.options.galleries) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showGallery,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-gallery' },\n          gettext(\"Pick avatar from gallery\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getAvatarPreview',\n    value: function getAvatarPreview() {\n      if (this.state.isLoading) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'avatar-preview preview-loading' },\n          _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '200' }),\n          _react2.default.createElement(_loader2.default, null)\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            { className: 'avatar-preview' },\n            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '200' })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-index' },\n        _react2.default.createElement(\n          'div',\n          { className: 'row' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-5' },\n            this.getAvatarPreview()\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-7' },\n            this.getGravatarButton(),\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.setGenerated,\n                disabled: this.state.isLoading,\n                className: 'btn-default btn-block btn-avatar-generate' },\n              gettext(\"Generate my individual avatar\")\n            ),\n            this.getCropButton(),\n            this.getUploadButton(),\n            this.getGalleryButton()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":91,\"../../services/snackbar\":99,\"../avatar\":49,\"../button\":51,\"../loader\":60,\"react\":\"react\"}],55:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChangeAvatarError = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('./index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _crop = require('./crop');\n\nvar _crop2 = _interopRequireDefault(_crop);\n\nvar _upload = require('./upload');\n\nvar _upload2 = _interopRequireDefault(_upload);\n\nvar _gallery = require('./gallery');\n\nvar _gallery2 = _interopRequireDefault(_gallery);\n\nvar _modalLoader = require('../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _users = require('../../reducers/users');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar ChangeAvatarError = exports.ChangeAvatarError = function (_React$Component) {\n  _inherits(ChangeAvatarError, _React$Component);\n\n  function ChangeAvatarError() {\n    _classCallCheck(this, ChangeAvatarError);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeAvatarError).apply(this, arguments));\n  }\n\n  _createClass(ChangeAvatarError, [{\n    key: 'getErrorReason',\n    value: function getErrorReason() {\n      if (this.props.reason) {\n        /* jshint ignore:start */\n        return _react2.default.createElement('p', { dangerouslySetInnerHTML: { __html: this.props.reason } });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body' },\n        _react2.default.createElement(\n          'div',\n          { className: 'message-icon' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'remove_circle_outline'\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'message-body' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.props.message\n          ),\n          this.getErrorReason()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeAvatarError;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this2, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this2 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.showError = function (error) {\n      _this2.setState({\n        error: error\n      });\n    }, _this2.showIndex = function () {\n      _this2.setState({\n        'component': _index2.default\n      });\n    }, _this2.showUpload = function () {\n      _this2.setState({\n        'component': _upload2.default\n      });\n    }, _this2.showCrop = function () {\n      _this2.setState({\n        'component': _crop2.default\n      });\n    }, _this2.showGallery = function () {\n      _this2.setState({\n        'component': _gallery2.default\n      });\n    }, _this2.completeFlow = function (avatarHash, options) {\n      _store2.default.dispatch((0, _users.updateAvatar)(_this2.props.user, avatarHash));\n\n      _this2.setState({\n        'component': _index2.default,\n        options: options\n      });\n    }, _temp), _possibleConstructorReturn(_this2, _ret);\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this3 = this;\n\n      _ajax2.default.get(this.props.user.api_url.avatar).then(function (options) {\n        _this3.setState({\n          'component': _index2.default,\n          'options': options,\n          'error': null\n        });\n      }, function (rejection) {\n        _this3.showError(rejection);\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getBody',\n\n    /* jshint ignore:end */\n\n    value: function getBody() {\n      if (this.state) {\n        if (this.state.error) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ChangeAvatarError, { message: this.state.error.detail,\n            reason: this.state.error.reason });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(this.state.component, { options: this.state.options,\n              user: this.props.user,\n              onComplete: this.completeFlow,\n              showError: this.showError,\n              showIndex: this.showIndex,\n              showCrop: this.showCrop,\n              showUpload: this.showUpload,\n              showGallery: this.showGallery });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state && this.state.error) {\n        return \"modal-dialog modal-message modal-change-avatar\";\n      } else {\n        return \"modal-dialog modal-change-avatar\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Change your avatar\")\n            )\n          ),\n          this.getBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(state) {\n  return {\n    'user': state.auth.user\n  };\n}\n\n},{\"../../reducers/users\":90,\"../../services/ajax\":91,\"../../services/store\":100,\"../modal-loader\":61,\"./crop\":52,\"./gallery\":53,\"./index\":54,\"./upload\":56,\"react\":\"react\"}],56:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _crop = require('./crop');\n\nvar _crop2 = _interopRequireDefault(_crop);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _fileSize = require('../../utils/file-size');\n\nvar _fileSize2 = _interopRequireDefault(_fileSize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.pickFile = function () {\n      document.getElementById('avatar-hidden-upload').click();\n    };\n\n    _this.uploadFile = function () {\n      var image = document.getElementById('avatar-hidden-upload').files[0];\n\n      var validationError = _this.validateFile(image);\n      if (validationError) {\n        _snackbar2.default.error(validationError);\n        return;\n      }\n\n      _this.setState({\n        image: image,\n        'preview': URL.createObjectURL(image),\n        'progress': 0\n      });\n\n      var data = new FormData();\n      data.append('avatar', 'upload');\n      data.append('image', image);\n\n      _ajax2.default.upload(_this.props.user.api_url.avatar, data, function (progress) {\n        _this.setState({\n          progress: progress\n        });\n      }).then(function (data) {\n        _this.setState({\n          'options': data.options,\n          'uploaded': data.detail\n        });\n        _snackbar2.default.info(gettext(\"Your image has been uploaded and you may now crop it.\"));\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this.setState({\n            'isLoading': false,\n            'image': null,\n            'progress': 0\n          });\n        } else {\n          _this.props.showError(rejection);\n        }\n      });\n    };\n\n    _this.state = {\n      'image': null,\n      'preview': null,\n      'progress': 0,\n      'uploaded': null\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'validateFile',\n    value: function validateFile(image) {\n      if (image.size > this.props.options.upload.limit) {\n        return interpolate(gettext(\"Selected file is too big. (%(filesize)s)\"), {\n          'filesize': (0, _fileSize2.default)(image.size)\n        }, true);\n      }\n\n      var invalidTypeMsg = gettext(\"Selected file type is not supported.\");\n      if (this.props.options.upload.allowed_mime_types.indexOf(image.type) === -1) {\n        return invalidTypeMsg;\n      }\n\n      var extensionFound = false;\n      var loweredFilename = image.name.toLowerCase();\n      this.props.options.upload.allowed_extensions.map(function (extension) {\n        if (loweredFilename.substr(extension.length * -1) === extension) {\n          extensionFound = true;\n        }\n      });\n\n      if (!extensionFound) {\n        return invalidTypeMsg;\n      }\n\n      return false;\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getUploadRequirements',\n\n    /* jshint ignore:end */\n\n    value: function getUploadRequirements(options) {\n      var extensions = options.allowed_extensions.map(function (extension) {\n        return extension.substr(1);\n      });\n\n      return interpolate(gettext(\"%(files)s files smaller than %(limit)s\"), {\n        'files': extensions.join(', '),\n        'limit': (0, _fileSize2.default)(options.limit)\n      }, true);\n    }\n  }, {\n    key: 'getUploadButton',\n    value: function getUploadButton() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-upload' },\n        _react2.default.createElement(\n          _button2.default,\n          { className: 'btn-pick-file',\n            onClick: this.pickFile },\n          _react2.default.createElement(\n            'div',\n            { className: 'material-icon' },\n            'input'\n          ),\n          gettext(\"Select file\")\n        ),\n        _react2.default.createElement(\n          'p',\n          { className: 'text-muted' },\n          this.getUploadRequirements(this.props.options.upload)\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getUploadProgressLabel',\n    value: function getUploadProgressLabel() {\n      return interpolate(gettext(\"%(progress)s % complete\"), {\n        'progress': this.state.progress\n      }, true);\n    }\n  }, {\n    key: 'getUploadProgress',\n    value: function getUploadProgress() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-upload' },\n        _react2.default.createElement(\n          'div',\n          { className: 'upload-progress' },\n          _react2.default.createElement('img', { src: this.state.preview }),\n          _react2.default.createElement(\n            'div',\n            { className: 'progress' },\n            _react2.default.createElement(\n              'div',\n              { className: 'progress-bar', role: 'progressbar',\n                'aria-valuenow': '{this.state.progress}',\n                'aria-valuemin': '0', 'aria-valuemax': '100',\n                style: { width: this.state.progress + '%' } },\n              _react2.default.createElement(\n                'span',\n                { className: 'sr-only' },\n                this.getUploadProgressLabel()\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderUpload',\n    value: function renderUpload() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement('input', { type: 'file',\n          id: 'avatar-hidden-upload',\n          className: 'hidden-file-upload',\n          onChange: this.uploadFile }),\n        this.state.image ? this.getUploadProgress() : this.getUploadButton(),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-6 col-md-offset-3' },\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.props.showIndex,\n                disabled: !!this.state.image,\n                className: 'btn-default btn-block' },\n              gettext(\"Cancel\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderCrop',\n    value: function renderCrop() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(_crop2.default, { options: this.state.options,\n        user: this.props.user,\n        upload: this.state.uploaded,\n        onComplete: this.props.onComplete,\n        showError: this.props.showError,\n        showIndex: this.props.showIndex });\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return this.state.uploaded ? this.renderCrop() : this.renderUpload();\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":91,\"../../services/snackbar\":99,\"../../utils/file-size\":104,\"../button\":51,\"./crop\":52,\"react\":\"react\"}],57:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'isValidated',\n    value: function isValidated() {\n      return typeof this.props.validation !== \"undefined\";\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      var className = 'form-group';\n      if (this.isValidated()) {\n        className += ' has-feedback';\n        if (this.props.validation === null) {\n          className += ' has-success';\n        } else {\n          className += ' has-error';\n        }\n      }\n      return className;\n    }\n  }, {\n    key: 'getFeedback',\n    value: function getFeedback() {\n      var _this2 = this;\n\n      if (this.props.validation) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'help-block errors' },\n          this.props.validation.map(function (error, i) {\n            return _react2.default.createElement(\n              'p',\n              { key: _this2.props.for + 'FeedbackItem' + i },\n              error\n            );\n          })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFeedbackIcon',\n    value: function getFeedbackIcon() {\n      if (this.isValidated()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'material-icon form-control-feedback',\n            'aria-hidden': 'true', key: this.props.for + 'FeedbackIcon' },\n          this.props.validation ? 'clear' : 'check'\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFeedbackDescription',\n    value: function getFeedbackDescription() {\n      if (this.isValidated()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { id: this.props.for + '_status', className: 'sr-only' },\n          this.props.validation ? gettext('(error)') : gettext('(success)')\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.helpText) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          { className: 'help-block' },\n          this.props.helpText\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'label',\n          { className: 'control-label ' + (this.props.labelClass || ''),\n            htmlFor: this.props.for || '' },\n          this.props.label + ':'\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.props.controlClass || '' },\n          this.props.children,\n          this.getFeedbackIcon(),\n          this.getFeedbackDescription(),\n          this.getFeedback(),\n          this.getHelpText(),\n          this.props.extra || null\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],58:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _validators = require('../utils/validators');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar validateRequired = (0, _validators.required)();\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.bindInput = function (name) {\n      return function (event) {\n        var newState = _defineProperty({}, name, event.target.value);\n\n        var formErrors = _this.state.errors || {};\n        formErrors[name] = _this.validateField(name, newState[name]);\n        newState.errors = formErrors;\n\n        _this.setState(newState);\n      };\n    }, _this.handleSubmit = function (event) {\n      // we don't reload page on submissions\n      event.preventDefault();\n      if (_this.state.isLoading) {\n        return;\n      }\n\n      if (_this.clean()) {\n        _this.setState({ isLoading: true });\n        var promise = _this.send();\n\n        if (promise) {\n          promise.then(function (success) {\n            _this.setState({ isLoading: false });\n            _this.handleSuccess(success);\n          }, function (rejection) {\n            _this.setState({ isLoading: false });\n            _this.handleError(rejection);\n          });\n        } else {\n          _this.setState({ isLoading: false });\n        }\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: 'validate',\n    value: function validate() {\n      var errors = {};\n      if (!this.state.validators) {\n        return errors;\n      }\n\n      var validators = {\n        required: this.state.validators.required || this.state.validators,\n        optional: this.state.validators.optional || {}\n      };\n\n      var validatedFields = [];\n\n      // add required fields to validation\n      for (var name in validators.required) {\n        if (validators.required.hasOwnProperty(name) && validators.required[name]) {\n          validatedFields.push(name);\n        }\n      }\n\n      // add optional fields to validation\n      for (var name in validators.optional) {\n        if (validators.optional.hasOwnProperty(name) && validators.optional[name]) {\n          validatedFields.push(name);\n        }\n      }\n\n      // validate fields values\n      for (var i in validatedFields) {\n        var name = validatedFields[i];\n        var fieldErrors = this.validateField(name, this.state[name]);\n\n        if (fieldErrors === null) {\n          errors[name] = null;\n        } else if (fieldErrors) {\n          errors[name] = fieldErrors;\n        }\n      }\n\n      return errors;\n    }\n  }, {\n    key: 'isValid',\n    value: function isValid() {\n      var errors = this.validate();\n      for (var field in errors) {\n        if (errors.hasOwnProperty(field)) {\n          if (errors[field] !== null) {\n            return false;\n          }\n        }\n      }\n\n      return true;\n    }\n  }, {\n    key: 'validateField',\n    value: function validateField(name, value) {\n      var errors = [];\n      if (!this.state.validators) {\n        return errors;\n      }\n\n      var validators = {\n        required: (this.state.validators.required || this.state.validators)[name],\n        optional: (this.state.validators.optional || {})[name]\n      };\n\n      var requiredError = validateRequired(value) || false;\n\n      if (validators.required) {\n        if (requiredError) {\n          errors = [requiredError];\n        } else {\n          for (var i in validators.required) {\n            var validationError = validators.required[i](value);\n            if (validationError) {\n              errors.push(validationError);\n            }\n          }\n        }\n\n        return errors.length ? errors : null;\n      } else if (requiredError === false && validators.optional) {\n        for (var i in validators.optional) {\n          var validationError = validators.optional[i](value);\n          if (validationError) {\n            errors.push(validationError);\n          }\n        }\n\n        return errors.length ? errors : null;\n      }\n\n      return false; // false === field wasn't validated\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'clean',\n    value: function clean() {\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return null;\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(success) {\n      return;\n    }\n  }, {\n    key: 'handleError',\n\n    /* jshint ignore:end */\n    value: function handleError(rejection) {\n      return;\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../utils/validators\":109,\"react\":\"react\"}],59:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'isActive',\n    value: function isActive() {\n      if (this.props.path) {\n        return document.location.pathname.indexOf(this.props.path) === 0;\n      } else {\n        return false;\n      }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.isActive()) {\n        return (this.props.className || '') + ' ' + (this.props.activeClassName || 'active');\n      } else {\n        return this.props.className || '';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'li',\n        { className: this.getClassName() },\n        this.props.children\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],60:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.props.className || \"loader\" },\n        _react2.default.createElement(\"div\", { className: \"loader-spinning-wheel\" })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],61:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-loader' },\n        _react2.default.createElement(_loader2.default, null)\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./loader\":60,\"react\":\"react\"}],62:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.UsernameHistory = exports.ChangeUsernameLoading = exports.NoChangesLeft = exports.ChangeUsername = undefined;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _loader = require('../loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory = require('../../reducers/username-history');\n\nvar _users = require('../../reducers/users');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _random = require('../../utils/random');\n\nvar random = _interopRequireWildcard(_random);\n\nvar _validators = require('../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar ChangeUsername = exports.ChangeUsername = function (_Form) {\n  _inherits(ChangeUsername, _Form);\n\n  function ChangeUsername(props) {\n    _classCallCheck(this, ChangeUsername);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeUsername).call(this, props));\n\n    _this.state = {\n      username: '',\n\n      validators: {\n        username: [validators.usernameContent(), validators.usernameMinLength({\n          username_length_min: props.options.length_min\n        }), validators.usernameMaxLength({\n          username_length_max: props.options.length_max\n        })]\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(ChangeUsername, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      var phrases = [];\n\n      if (this.props.options.changes_left > 0) {\n        var message = ngettext(\"You can change your username %(changes_left)s more time.\", \"You can change your username %(changes_left)s more times.\", this.props.options.changes_left);\n\n        phrases.push(interpolate(message, {\n          'changes_left': this.props.options.changes_left\n        }, true));\n      }\n\n      if (this.props.user.acl.name_changes_expire > 0) {\n        var message = ngettext(\"Used changes redeem after %(name_changes_expire)s day.\", \"Used changes redeem after %(name_changes_expire)s days.\", this.props.user.acl.name_changes_expire);\n\n        phrases.push(interpolate(message, {\n          'name_changes_expire': this.props.user.acl.name_changes_expire\n        }, true));\n      }\n\n      return phrases.length ? phrases.join(' ') : null;\n    }\n  }, {\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      if (errors.username) {\n        _snackbar2.default.error(errors.username[0]);\n        return false;\n      }if (this.state.username.trim() === this.props.user.username) {\n        _snackbar2.default.info(gettext(\"Your new username is same as current one.\"));\n        return false;\n      } else {\n        return true;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.username, {\n        'username': this.state.username\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(success) {\n      this.setState({\n        'username': ''\n      });\n\n      this.props.complete(success.username, success.slug, success.options);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      _snackbar2.default.apiError(rejection);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change username\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New username\"), 'for': 'id_username',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                helpText: this.getHelpText() },\n              _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('username'),\n                value: this.state.username })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change username\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeUsername;\n}(_form2.default);\n\nvar NoChangesLeft = exports.NoChangesLeft = function (_React$Component) {\n  _inherits(NoChangesLeft, _React$Component);\n\n  function NoChangesLeft() {\n    _classCallCheck(this, NoChangesLeft);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoChangesLeft).apply(this, arguments));\n  }\n\n  _createClass(NoChangesLeft, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.options.next_on) {\n        return interpolate(gettext(\"You will be able to change your username %(next_change)s.\"), { 'next_change': this.props.options.next_on.fromNow() }, true);\n      } else {\n        return gettext(\"You have used up available name changes.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel panel-default panel-form' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-heading' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'panel-title' },\n            gettext(\"Change username\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-body panel-message-body' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'info_outline'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              { className: 'lead' },\n              gettext(\"You can't change your username at the moment.\")\n            ),\n            _react2.default.createElement(\n              'p',\n              { className: 'help-block' },\n              this.getHelpText()\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return NoChangesLeft;\n}(_react2.default.Component);\n\nvar ChangeUsernameLoading = exports.ChangeUsernameLoading = function (_React$Component2) {\n  _inherits(ChangeUsernameLoading, _React$Component2);\n\n  function ChangeUsernameLoading() {\n    _classCallCheck(this, ChangeUsernameLoading);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeUsernameLoading).apply(this, arguments));\n  }\n\n  _createClass(ChangeUsernameLoading, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel panel-default panel-form' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-heading' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'panel-title' },\n            gettext(\"Change username\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-body panel-body-loading' },\n          _react2.default.createElement(_loader2.default, { className: 'loader loader-spaced' })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeUsernameLoading;\n}(_react2.default.Component);\n\nvar UsernameHistory = exports.UsernameHistory = function (_React$Component3) {\n  _inherits(UsernameHistory, _React$Component3);\n\n  function UsernameHistory() {\n    _classCallCheck(this, UsernameHistory);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UsernameHistory).apply(this, arguments));\n  }\n\n  _createClass(UsernameHistory, [{\n    key: 'renderUserAvatar',\n    value: function renderUserAvatar(item) {\n      if (item.changed_by) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: item.changed_by.absolute_url, className: 'user-avatar' },\n          _react2.default.createElement(_avatar2.default, { user: item.changed_by, size: '100' })\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'user-avatar' },\n            _react2.default.createElement(_avatar2.default, { size: '100' })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'renderUsername',\n    value: function renderUsername(item) {\n      if (item.changed_by) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: item.changed_by.absolute_url, className: 'item-title' },\n          item.changed_by.username\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'item-title' },\n            item.changed_by_username\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'renderHistory',\n    value: function renderHistory() {\n      var _this5 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-ready' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          this.props.changes.map(function (item) {\n            return _react2.default.createElement(\n              'li',\n              { className: 'list-group-item', key: item.id },\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-avatar' },\n                _this5.renderUserAvatar(item)\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-author' },\n                _this5.renderUsername(item)\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change' },\n                item.old_username,\n                _react2.default.createElement(\n                  'span',\n                  { className: 'material-icon' },\n                  'arrow_forward'\n                ),\n                item.new_username\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-date' },\n                _react2.default.createElement(\n                  'abbr',\n                  { title: item.changed_on.format('LLL') },\n                  item.changed_on.fromNow()\n                )\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderEmptyHistory',\n    value: function renderEmptyHistory() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-ready' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          _react2.default.createElement(\n            'li',\n            { className: 'list-group-item empty-message' },\n            gettext(\"No name changes have been recorded for your account.\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderHistoryPreview',\n    value: function renderHistoryPreview() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-preview' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          random.range(3, 5).map(function (i) {\n            return _react2.default.createElement(\n              'li',\n              { className: 'list-group-item', key: i },\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-avatar' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'user-avatar' },\n                  _react2.default.createElement(_avatar2.default, { size: '100' })\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-author' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 100) + \"px\" } },\n                  ' '\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                  ' '\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'material-icon' },\n                  'arrow_forward'\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                  ' '\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-date' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(50, 100) + \"px\" } },\n                  ' '\n                )\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      if (this.props.isLoaded) {\n        if (this.props.changes.length) {\n          return this.renderHistory();\n        } else {\n          return this.renderEmptyHistory();\n        }\n      } else {\n        return this.renderHistoryPreview();\n      }\n    }\n  }]);\n\n  return UsernameHistory;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component4) {\n  _inherits(_class, _React$Component4);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this6 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this6.onComplete = function (username, slug, options) {\n      _this6.setState({\n        options: options\n      });\n\n      _store2.default.dispatch((0, _usernameHistory.addNameChange)({ username: username, slug: slug }, _this6.props.user, _this6.props.user));\n      _store2.default.dispatch((0, _users.updateUsername)(_this6.props.user, username, slug));\n\n      _snackbar2.default.success(gettext(\"Your username has been changed successfully.\"));\n    };\n\n    _this6.state = {\n      isLoaded: false,\n      options: null\n    };\n    return _this6;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this7 = this;\n\n      _pageTitle2.default.set({\n        title: gettext(\"Change username\"),\n        parent: gettext(\"Change your options\")\n      });\n\n      Promise.all([_ajax2.default.get(this.props.user.api_url.username), _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), { user: this.props.user.id })]).then(function (data) {\n        _this7.setState({\n          isLoaded: true,\n          options: {\n            changes_left: data[0].changes_left,\n            length_min: data[0].length_min,\n            length_max: data[0].length_max,\n            next_on: data[0].next_on ? (0, _moment2.default)(data[0].next_on) : null\n          }\n        });\n\n        _store2.default.dispatch((0, _usernameHistory.dehydrate)(data[1].results));\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getChangeForm',\n\n    /* jshint ignore:end */\n\n    value: function getChangeForm() {\n      if (this.state.isLoaded) {\n        if (this.state.options.changes_left > 0) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ChangeUsername, { user: this.props.user,\n            options: this.state.options,\n            complete: this.onComplete });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(NoChangesLeft, { options: this.state.options });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ChangeUsernameLoading, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        this.getChangeForm(),\n        _react2.default.createElement(UsernameHistory, { isLoaded: this.state.isLoaded,\n          changes: this.props['username-history'] })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":85,\"../../reducers/username-history\":89,\"../../reducers/users\":90,\"../../services/ajax\":91,\"../../services/page-title\":98,\"../../services/snackbar\":99,\"../../services/store\":100,\"../../utils/random\":107,\"../../utils/validators\":109,\"../avatar\":49,\"../button\":51,\"../form\":58,\"../form-group\":57,\"../loader\":60,\"moment\":\"moment\",\"react\":\"react\"}],63:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _select = require('../select');\n\nvar _select2 = _interopRequireDefault(_select);\n\nvar _yesNoSwitch = require('../yes-no-switch');\n\nvar _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);\n\nvar _auth = require('../../reducers/auth');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'is_hiding_presence': props.user.is_hiding_presence,\n      'limits_private_thread_invites_to': props.user.limits_private_thread_invites_to,\n      'subscribe_to_started_threads': props.user.subscribe_to_started_threads,\n      'subscribe_to_replied_threads': props.user.subscribe_to_replied_threads,\n\n      'errors': {}\n    };\n\n    _this.privateThreadInvitesChoices = [{\n      'value': 0,\n      'icon': 'help_outline',\n      'label': gettext('Everybody')\n    }, {\n      'value': 1,\n      'icon': 'done_all',\n      'label': gettext('Users I follow')\n    }, {\n      'value': 2,\n      'icon': 'highlight_off',\n      'label': gettext('Nobody')\n    }];\n\n    _this.subscribeToChoices = [{\n      'value': 0,\n      'icon': 'bookmark_border',\n      'label': gettext('No')\n    }, {\n      'value': 1,\n      'icon': 'bookmark',\n      'label': gettext('Bookmark')\n    }, {\n      'value': 2,\n      'icon': 'mail',\n      'label': gettext('Bookmark with e-mail notification')\n    }];\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.options, {\n        'is_hiding_presence': this.state.is_hiding_presence,\n        'limits_private_thread_invites_to': this.state.limits_private_thread_invites_to,\n        'subscribe_to_started_threads': this.state.subscribe_to_started_threads,\n        'subscribe_to_replied_threads': this.state.subscribe_to_replied_threads\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      _store2.default.dispatch((0, _auth.patchUser)({\n        'is_hiding_presence': this.state.is_hiding_presence,\n        'limits_private_thread_invites_to': this.state.limits_private_thread_invites_to,\n        'subscribe_to_started_threads': this.state.subscribe_to_started_threads,\n        'subscribe_to_replied_threads': this.state.subscribe_to_replied_threads\n      }));\n      _snackbar2.default.success(gettext(\"Your forum options have been changed.\"));\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        _snackbar2.default.error(gettext(\"Please reload page and try again.\"));\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Forum options\"),\n        parent: gettext(\"Change your options\")\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change forum options\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              'fieldset',\n              null,\n              _react2.default.createElement(\n                'legend',\n                null,\n                gettext(\"Privacy settings\")\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Hide my presence\"),\n                  helpText: gettext(\"If you hide your presence, only members with permission to see hidden users will see when you are online.\"),\n                  'for': 'id_is_hiding_presence',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_hiding_presence',\n                  disabled: this.state.isLoading,\n                  iconOn: 'visibility',\n                  iconOff: 'visibility_off',\n                  labelOn: gettext(\"Show my presence to other users\"),\n                  labelOff: gettext(\"Hide my presence from other users\"),\n                  onChange: this.bindInput('is_hiding_presence'),\n                  value: this.state.is_hiding_presence })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Private thread invitations\"),\n                  'for': 'id_limits_private_thread_invites_to',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_limits_private_thread_invites_to',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('limits_private_thread_invites_to'),\n                  value: this.state.limits_private_thread_invites_to,\n                  choices: this.privateThreadInvitesChoices })\n              )\n            ),\n            _react2.default.createElement(\n              'fieldset',\n              null,\n              _react2.default.createElement(\n                'legend',\n                null,\n                gettext(\"Automatic subscriptions\")\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Threads I start\"),\n                  'for': 'id_subscribe_to_started_threads',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_started_threads',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('subscribe_to_started_threads'),\n                  value: this.state.subscribe_to_started_threads,\n                  choices: this.subscribeToChoices })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Threads I reply to\"),\n                  'for': 'id_subscribe_to_replied_threads',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_replied_threads',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('subscribe_to_replied_threads'),\n                  value: this.state.subscribe_to_replied_threads,\n                  choices: this.subscribeToChoices })\n              )\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Save changes\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../reducers/auth\":86,\"../../services/ajax\":91,\"../../services/page-title\":98,\"../../services/snackbar\":99,\"../../services/store\":100,\"../button\":51,\"../form\":58,\"../form-group\":57,\"../select\":73,\"../yes-no-switch\":84,\"react\":\"react\"}],64:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.SideNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n//jshint ignore:line\n\n//jshint ignore:line\n\nvar SideNav = exports.SideNav = function (_React$Component) {\n  _inherits(SideNav, _React$Component);\n\n  function SideNav() {\n    _classCallCheck(this, SideNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));\n  }\n\n  _createClass(SideNav, [{\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'list-group nav-side' },\n        this.props.options.map(function (option) {\n          return _react2.default.createElement(\n            _reactRouter.Link,\n            { to: _this2.props.baseUrl + option.component + '/',\n              className: 'list-group-item',\n              activeClassName: 'active',\n              key: option.component },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              option.icon\n            ),\n            option.name\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return SideNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_React$Component2) {\n  _inherits(CompactNav, _React$Component2);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'render',\n    value: function render() {\n      var _this4 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        this.props.options.map(function (option) {\n          return _react2.default.createElement(\n            _li2.default,\n            { path: _this4.props.baseUrl + option.component + '/',\n              key: option.component },\n            _react2.default.createElement(\n              _reactRouter.Link,\n              { to: _this4.props.baseUrl + option.component + '/' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                option.icon\n              ),\n              option.name\n            )\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(_react2.default.Component);\n\n},{\"../../index\":85,\"../li\":59,\"react\":\"react\",\"react-router\":\"react-router\"}],65:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.paths = paths;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _navs = require('./navs');\n\nvar _forumOptions = require('./forum-options');\n\nvar _forumOptions2 = _interopRequireDefault(_forumOptions);\n\nvar _changeUsername = require('./change-username');\n\nvar _changeUsername2 = _interopRequireDefault(_changeUsername);\n\nvar _signInCredentials = require('./sign-in-credentials');\n\nvar _signInCredentials2 = _interopRequireDefault(_signInCredentials);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.toggleNav = function () {\n      if (_this.state.dropdown) {\n        _this.setState({\n          dropdown: false\n        });\n      } else {\n        _this.setState({\n          dropdown: true\n        });\n      }\n    };\n\n    _this.state = {\n      dropdown: false\n    };\n    return _this;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getToggleNavClassName',\n\n    /* jshint ignore:end */\n\n    value: function getToggleNavClassName() {\n      if (this.state.dropdown) {\n        return 'btn btn-default btn-icon open';\n      } else {\n        return 'btn btn-default btn-icon';\n      }\n    }\n  }, {\n    key: 'getCompactNavClassName',\n    value: function getCompactNavClassName() {\n      if (this.state.dropdown) {\n        return 'compact-nav open';\n      } else {\n        return 'compact-nav';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-options' },\n        _react2.default.createElement(\n          'div',\n          { className: 'page-header' },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            _react2.default.createElement(\n              'h1',\n              { className: 'pull-left' },\n              gettext(\"Change your options\")\n            ),\n            _react2.default.createElement(\n              'button',\n              { className: 'btn btn-default btn-icon btn-dropdown-toggle hidden-md hidden-lg',\n                type: 'button',\n                onClick: this.toggleNav,\n                'aria-haspopup': 'true',\n                'aria-expanded': this.state.dropdown ? 'true' : 'false' },\n              _react2.default.createElement(\n                'i',\n                { className: 'material-icon' },\n                'menu'\n              )\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          _react2.default.createElement(_navs.CompactNav, { options: _index2.default.get('USER_OPTIONS'),\n            baseUrl: _index2.default.get('USERCP_URL') })\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-3 hidden-xs hidden-sm' },\n              _react2.default.createElement(_navs.SideNav, { options: _index2.default.get('USER_OPTIONS'),\n                baseUrl: _index2.default.get('USERCP_URL') })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-9' },\n              this.props.children\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user,\n    'username-history': store['username-history']\n  };\n}\n\nfunction paths() {\n  return [{\n    path: _index2.default.get('USERCP_URL') + 'forum-options/',\n    component: (0, _reactRedux.connect)(select)(_forumOptions2.default)\n  }, {\n    path: _index2.default.get('USERCP_URL') + 'change-username/',\n    component: (0, _reactRedux.connect)(select)(_changeUsername2.default)\n  }, {\n    path: _index2.default.get('USERCP_URL') + 'sign-in-credentials/',\n    component: (0, _reactRedux.connect)(select)(_signInCredentials2.default)\n  }];\n}\n\n},{\"../../index\":85,\"./change-username\":62,\"./forum-options\":63,\"./navs\":64,\"./sign-in-credentials\":66,\"react\":\"react\",\"react-redux\":\"react-redux\"}],66:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChangePassword = exports.ChangeEmail = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar ChangeEmail = exports.ChangeEmail = function (_Form) {\n  _inherits(ChangeEmail, _Form);\n\n  function ChangeEmail(props) {\n    _classCallCheck(this, ChangeEmail);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeEmail).call(this, props));\n\n    _this.state = {\n      new_email: '',\n      password: '',\n\n      validators: {\n        new_email: [validators.email()],\n        password: []\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(ChangeEmail, [{\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      var lengths = [this.state.new_email.trim().length, this.state.password.trim().length];\n\n      if (lengths.indexOf(0) !== -1) {\n        _snackbar2.default.error(gettext(\"Fill out all fields.\"));\n        return false;\n      }\n\n      if (errors.new_email) {\n        _snackbar2.default.error(errors.new_email[0]);\n        return false;\n      }\n\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.change_email, {\n        new_email: this.state.new_email,\n        password: this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(response) {\n      this.setState({\n        new_email: '',\n        password: ''\n      });\n\n      _snackbar2.default.success(response.detail);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.new_email) {\n          _snackbar2.default.error(rejection.new_email);\n        } else {\n          _snackbar2.default.error(rejection.password);\n        }\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change e-mail address\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New e-mail\"), 'for': 'id_new_email',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'text', id: 'id_new_email', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('new_email'),\n                value: this.state.new_email })\n            ),\n            _react2.default.createElement('hr', null),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Your current password\"), 'for': 'id_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change e-mail\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeEmail;\n}(_form2.default);\n\nvar ChangePassword = exports.ChangePassword = function (_Form2) {\n  _inherits(ChangePassword, _Form2);\n\n  function ChangePassword(props) {\n    _classCallCheck(this, ChangePassword);\n\n    var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(ChangePassword).call(this, props));\n\n    _this2.state = {\n      new_password: '',\n      repeat_password: '',\n      password: '',\n\n      validators: {\n        new_password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],\n        repeat_password: [],\n        password: []\n      },\n\n      isLoading: false\n    };\n    return _this2;\n  }\n\n  _createClass(ChangePassword, [{\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      var lengths = [this.state.new_password.trim().length, this.state.repeat_password.trim().length, this.state.password.trim().length];\n\n      if (lengths.indexOf(0) !== -1) {\n        _snackbar2.default.error(gettext(\"Fill out all fields.\"));\n        return false;\n      }\n\n      if (errors.new_password) {\n        _snackbar2.default.error(errors.new_password[0]);\n        return false;\n      }\n\n      if (this.state.new_password.trim() !== this.state.repeat_password.trim()) {\n        _snackbar2.default.error(gettext(\"New passwords are different.\"));\n        return false;\n      }\n\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.change_password, {\n        new_password: this.state.new_password,\n        password: this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(response) {\n      this.setState({\n        new_password: '',\n        repeat_password: '',\n        password: ''\n      });\n\n      _snackbar2.default.success(response.detail);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.new_password) {\n          _snackbar2.default.error(rejection.new_password);\n        } else {\n          _snackbar2.default.error(rejection.password);\n        }\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change password\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New password\"), 'for': 'id_new_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_new_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('new_password'),\n                value: this.state.new_password })\n            ),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Repeat password\"), 'for': 'id_repeat_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_repeat_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('repeat_password'),\n                value: this.state.repeat_password })\n            ),\n            _react2.default.createElement('hr', null),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Your current password\"), 'for': 'id_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change password\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangePassword;\n}(_form2.default);\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Change email or password\"),\n        parent: gettext(\"Change your options\")\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(ChangeEmail, { user: this.props.user }),\n        _react2.default.createElement(ChangePassword, { user: this.props.user }),\n        _react2.default.createElement(\n          'p',\n          { className: 'message-line' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'warning'\n          ),\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('FORGOTTEN_PASSWORD_URL') },\n            gettext(\"Change forgotten password\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":85,\"../../services/ajax\":91,\"../../services/page-title\":98,\"../../services/snackbar\":99,\"../../utils/validators\":109,\"../button\":51,\"../form\":58,\"../form-group\":57,\"react\":\"react\"}],67:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LABELS = exports.STYLES = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _zxcvbn = require('../services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar STYLES = exports.STYLES = ['progress-bar-danger', 'progress-bar-warning', 'progress-bar-warning', 'progress-bar-primary', 'progress-bar-success'];\n\nvar LABELS = exports.LABELS = [gettext(\"Entered password is very weak.\"), gettext(\"Entered password is weak.\"), gettext(\"Entered password is average.\"), gettext(\"Entered password is strong.\"), gettext(\"Entered password is very strong.\")];\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this._score = 0;\n    _this._password = null;\n    _this._inputs = [];\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getScore',\n    value: function getScore(password, inputs) {\n      var _this2 = this;\n\n      var cacheStale = false;\n\n      if (password.trim() !== this._password) {\n        cacheStale = true;\n      }\n\n      if (inputs.length !== this._inputs.length) {\n        cacheStale = true;\n      } else {\n        inputs.map(function (value, i) {\n          if (value.trim() !== _this2._inputs[i]) {\n            cacheStale = true;\n          }\n        });\n      }\n\n      if (cacheStale) {\n        this._score = _zxcvbn2.default.scorePassword(password, inputs);\n        this._password = password.trim();\n        this._inputs = inputs.map(function (value) {\n          return value.trim();\n        });\n      }\n\n      return this._score;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      var score = this.getScore(this.props.password, this.props.inputs);\n\n      return _react2.default.createElement(\n        'div',\n        { className: 'help-block password-strength' },\n        _react2.default.createElement(\n          'div',\n          { className: 'progress' },\n          _react2.default.createElement(\n            'div',\n            { className: \"progress-bar \" + STYLES[score],\n              style: { width: 20 + 20 * score + '%' },\n              role: 'progress-bar',\n              'aria-valuenow': score,\n              'aria-valuemin': '0',\n              'aria-valuemax': '4' },\n            _react2.default.createElement(\n              'span',\n              { className: 'sr-only' },\n              LABELS[score]\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'p',\n          { className: 'text-small' },\n          LABELS[score]\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/zxcvbn\":101,\"react\":\"react\"}],68:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _register = require('./register.js');\n\nvar _register2 = _interopRequireDefault(_register);\n\nvar _captcha = require('../services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _zxcvbn = require('../services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.showRegisterModal = function () {\n      if (misago.get('SETTINGS').account_activation === 'closed') {\n        _snackbar2.default.info(gettext(\"New registrations are currently disabled.\"));\n      } else if (_this.state.isLoaded) {\n        _modal2.default.show(_register2.default);\n      } else {\n        _this.setState({\n          'isLoading': true\n        });\n\n        Promise.all([_captcha2.default.load(), _zxcvbn2.default.load()]).then(function () {\n          if (!_this.state.isLoaded) {\n            _this.setState({\n              'isLoading': false,\n              'isLoaded': false\n            });\n          }\n\n          _modal2.default.show(_register2.default);\n        });\n      }\n    };\n\n    _this.state = {\n      'isLoading': false,\n      'isLoaded': false\n    };\n    return _this;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getClassName',\n\n    /* jshint ignore:end */\n\n    value: function getClassName() {\n      return this.props.className + (this.state.isLoading ? ' btn-loading' : '');\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showRegisterModal,\n          className: 'btn ' + this.getClassName(),\n          disabled: this.state.isLoaded },\n        gettext(\"Register\"),\n        this.state.isLoading ? _react2.default.createElement(_loader2.default, null) : null\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/captcha\":93,\"../services/modal\":97,\"../services/snackbar\":99,\"../services/zxcvbn\":101,\"./loader\":60,\"./register.js\":69,\"react\":\"react\"}],69:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.RegisterComplete = exports.RegisterForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('./form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _passwordStrength = require('./password-strength');\n\nvar _passwordStrength2 = _interopRequireDefault(_passwordStrength);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _auth = require('../services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _captcha = require('../services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar RegisterForm = exports.RegisterForm = function (_Form) {\n  _inherits(RegisterForm, _Form);\n\n  function RegisterForm(props) {\n    _classCallCheck(this, RegisterForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'username': '',\n      'email': '',\n      'password': '',\n      'captcha': '',\n\n      'validators': {\n        'username': [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))],\n        'email': [validators.email()],\n        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))],\n        'captcha': _captcha2.default.validator()\n      },\n\n      'errors': {}\n    };\n    return _this;\n  }\n\n  _createClass(RegisterForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Form contains errors.\"));\n        this.setState({\n          'errors': this.validate()\n        });\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('USERS_API'), {\n        'username': this.state.username,\n        'email': this.state.email,\n        'password': this.state.password,\n        'captcha': this.state.captcha\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        this.setState({\n          'errors': Object.assign({}, this.state.errors, rejection)\n        });\n        _snackbar2.default.error(gettext(\"Form contains errors.\"));\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n        _modal2.default.hide();\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'getLegalFootNote',\n    value: function getLegalFootNote() {\n      if (_index2.default.get('TERMS_OF_SERVICE_URL')) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: _index2.default.get('TERMS_OF_SERVICE_URL'),\n            target: '_blank' },\n          gettext(\"By registering you agree to site's terms and conditions.\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-register', role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Register\")\n            )\n          ),\n          _react2.default.createElement(\n            'form',\n            { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n            _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n            _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-body' },\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Username\"), 'for': 'id_username',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.username },\n                _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n                  'aria-describedby': 'id_username_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('username'),\n                  value: this.state.username })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"E-mail\"), 'for': 'id_email',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.email },\n                _react2.default.createElement('input', { type: 'text', id: 'id_email', className: 'form-control',\n                  'aria-describedby': 'id_email_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('email'),\n                  value: this.state.email })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Password\"), 'for': 'id_password',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.password,\n                  extra: _react2.default.createElement(_passwordStrength2.default, { password: this.state.password,\n                    inputs: [this.state.username, this.state.email] }) },\n                _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                  'aria-describedby': 'id_password_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('password'),\n                  value: this.state.password })\n              ),\n              _captcha2.default.component({\n                form: this,\n                labelClass: \"col-sm-4\",\n                controlClass: \"col-sm-8\"\n              })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-footer' },\n              this.getLegalFootNote(),\n              _react2.default.createElement(\n                _button2.default,\n                { className: 'btn-primary', loading: this.state.isLoading },\n                gettext(\"Register account\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RegisterForm;\n}(_form2.default);\n\nvar RegisterComplete = exports.RegisterComplete = function (_React$Component) {\n  _inherits(RegisterComplete, _React$Component);\n\n  function RegisterComplete() {\n    _classCallCheck(this, RegisterComplete);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterComplete).apply(this, arguments));\n  }\n\n  _createClass(RegisterComplete, [{\n    key: 'getLead',\n    value: function getLead() {\n      if (this.props.activation === 'user') {\n        return gettext(\"%(username)s, your account has been created but you need to activate it before you will be able to sign in.\");\n      } else if (this.props.activation === 'admin') {\n        return gettext(\"%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.\");\n      }\n    }\n  }, {\n    key: 'getSubscript',\n    value: function getSubscript() {\n      if (this.props.activation === 'user') {\n        return gettext(\"We have sent an e-mail to %(email)s with link that you have to click to activate your account.\");\n      } else if (this.props.activation === 'admin') {\n        return gettext(\"We will send an e-mail to %(email)s when this takes place.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-message modal-register',\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Registration complete\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-body' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'info_outline'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                interpolate(this.getLead(), { 'username': this.props.username }, true)\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                interpolate(this.getSubscript(), { 'email': this.props.email }, true)\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RegisterComplete;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this3.completeRegistration = function (apiResponse) {\n      if (apiResponse.activation === 'active') {\n        _modal2.default.hide();\n        _auth2.default.signIn(apiResponse);\n      } else {\n        _this3.setState({\n          'complete': apiResponse\n        });\n      }\n    };\n\n    _this3.state = {\n      'complete': false\n    };\n    return _this3;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(RegisterComplete, { activation: this.state.complete.activation,\n          username: this.state.complete.username,\n          email: this.state.complete.email });\n      } else {\n        return _react2.default.createElement(RegisterForm, { callback: this.completeRegistration });\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":85,\"../services/ajax\":91,\"../services/auth\":92,\"../services/captcha\":93,\"../services/modal\":97,\"../services/snackbar\":99,\"../utils/banned-page\":102,\"../utils/validators\":109,\"./button\":51,\"./form\":58,\"./form-group\":57,\"./password-strength\":67,\"react\":\"react\"}],70:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LinkSent = exports.RequestLinkForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar RequestLinkForm = exports.RequestLinkForm = function (_Form) {\n  _inherits(RequestLinkForm, _Form);\n\n  function RequestLinkForm(props) {\n    _classCallCheck(this, RequestLinkForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestLinkForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'email': '',\n\n      'validators': {\n        'email': [validators.email()]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(RequestLinkForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Enter a valid email address.\"));\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('SEND_ACTIVATION_API'), {\n        'email': this.state.email\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (['already_active', 'inactive_admin'].indexOf(rejection.code) > -1) {\n        _snackbar2.default.info(rejection.detail);\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-activation-link' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'text', className: 'form-control',\n                placeholder: gettext(\"Your e-mail address\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('email'),\n                value: this.state.email })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Send link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RequestLinkForm;\n}(_form2.default);\n\nvar LinkSent = exports.LinkSent = function (_React$Component) {\n  _inherits(LinkSent, _React$Component);\n\n  function LinkSent() {\n    _classCallCheck(this, LinkSent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));\n  }\n\n  _createClass(LinkSent, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"Activation link was sent to %(email)s\"), {\n        email: this.props.user.email\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-activation-link well-done' },\n        _react2.default.createElement(\n          'div',\n          { className: 'done-message' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'check'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              null,\n              this.getMessage()\n            )\n          ),\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-primary btn-block',\n              onClick: this.props.callback },\n            gettext(\"Request another link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return LinkSent;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this3.complete = function (apiResponse) {\n      _this3.setState({\n        complete: apiResponse\n      });\n    };\n\n    _this3.reset = function () {\n      _this3.setState({\n        complete: false\n      });\n    };\n\n    _this3.state = {\n      complete: false\n    };\n    return _this3;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });\n      } else {\n        return _react2.default.createElement(RequestLinkForm, { callback: this.complete });\n      };\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":85,\"../services/ajax\":91,\"../services/snackbar\":99,\"../utils/banned-page\":102,\"../utils/validators\":109,\"./button\":51,\"./form\":58,\"react\":\"react\"}],71:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AccountInactivePage = exports.LinkSent = exports.RequestResetForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar RequestResetForm = exports.RequestResetForm = function (_Form) {\n  _inherits(RequestResetForm, _Form);\n\n  function RequestResetForm(props) {\n    _classCallCheck(this, RequestResetForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestResetForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'email': '',\n\n      'validators': {\n        'email': [validators.email()]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(RequestResetForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Enter a valid email address.\"));\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('SEND_PASSWORD_RESET_API'), {\n        'email': this.state.email\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (['inactive_user', 'inactive_admin'].indexOf(rejection.code) > -1) {\n        this.props.showInactivePage(rejection);\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-password-reset' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'text', className: 'form-control',\n                placeholder: gettext(\"Your e-mail address\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('email'),\n                value: this.state.email })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Send link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RequestResetForm;\n}(_form2.default);\n\nvar LinkSent = exports.LinkSent = function (_React$Component) {\n  _inherits(LinkSent, _React$Component);\n\n  function LinkSent() {\n    _classCallCheck(this, LinkSent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));\n  }\n\n  _createClass(LinkSent, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"Reset password link was sent to %(email)s\"), {\n        email: this.props.user.email\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-password-reset well-done' },\n        _react2.default.createElement(\n          'div',\n          { className: 'done-message' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'check'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              null,\n              this.getMessage()\n            )\n          ),\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-primary btn-block',\n              onClick: this.props.callback },\n            gettext(\"Request another link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return LinkSent;\n}(_react2.default.Component);\n\nvar AccountInactivePage = exports.AccountInactivePage = function (_React$Component2) {\n  _inherits(AccountInactivePage, _React$Component2);\n\n  function AccountInactivePage() {\n    _classCallCheck(this, AccountInactivePage);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(AccountInactivePage).apply(this, arguments));\n  }\n\n  _createClass(AccountInactivePage, [{\n    key: 'getActivateButton',\n    value: function getActivateButton() {\n      if (this.props.activation === 'inactive_user') {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('REQUEST_ACTIVATION_URL') },\n            gettext(\"Activate your account.\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-message page-message-info page-forgotten-password-inactive' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'info_outline'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                gettext(\"Your account is inactive.\")\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                this.props.message\n              ),\n              this.getActivateButton()\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return AccountInactivePage;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component3) {\n  _inherits(_class, _React$Component3);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this4.complete = function (apiResponse) {\n      _this4.setState({\n        complete: apiResponse\n      });\n    };\n\n    _this4.reset = function () {\n      _this4.setState({\n        complete: false\n      });\n    };\n\n    _this4.state = {\n      complete: false\n    };\n    return _this4;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'showInactivePage',\n    value: function showInactivePage(apiResponse) {\n      _reactDom2.default.render(_react2.default.createElement(AccountInactivePage, { activation: apiResponse.code,\n        message: apiResponse.detail }), document.getElementById('page-mount'));\n    }\n    /* jshint ignore:end */\n\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });\n      } else {\n        return _react2.default.createElement(RequestResetForm, { callback: this.complete,\n          showInactivePage: this.showInactivePage });\n      };\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":85,\"../services/ajax\":91,\"../services/snackbar\":99,\"../utils/banned-page\":102,\"../utils/validators\":109,\"./button\":51,\"./form\":58,\"react\":\"react\",\"react-dom\":\"react-dom\"}],72:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PasswordChangedPage = exports.ResetPasswordForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _signIn = require('./sign-in.js');\n\nvar _signIn2 = _interopRequireDefault(_signIn);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _auth = require('../services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar ResetPasswordForm = exports.ResetPasswordForm = function (_Form) {\n  _inherits(ResetPasswordForm, _Form);\n\n  function ResetPasswordForm(props) {\n    _classCallCheck(this, ResetPasswordForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ResetPasswordForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'password': '',\n\n      'validators': {\n        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(ResetPasswordForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        if (this.state.password.trim().length) {\n          _snackbar2.default.error(this.state.errors.password[0]);\n        } else {\n          _snackbar2.default.error(gettext(\"Enter new password.\"));\n        }\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('CHANGE_PASSWORD_API'), {\n        'password': this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-reset-password' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'password', className: 'form-control',\n                placeholder: gettext(\"Enter new password\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Change password\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ResetPasswordForm;\n}(_form2.default);\n\nvar PasswordChangedPage = exports.PasswordChangedPage = function (_React$Component) {\n  _inherits(PasswordChangedPage, _React$Component);\n\n  function PasswordChangedPage() {\n    _classCallCheck(this, PasswordChangedPage);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(PasswordChangedPage).apply(this, arguments));\n  }\n\n  _createClass(PasswordChangedPage, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"%(username)s, your password has been changed successfully.\"), {\n        username: this.props.user.username\n      }, true);\n    }\n  }, {\n    key: 'showSignIn',\n    value: function showSignIn() {\n      _modal2.default.show(_signIn2.default);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-message page-message-success page-forgotten-password-changed' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'check'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                this.getMessage()\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                gettext(\"You will have to sign in using new password before continuing.\")\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                _react2.default.createElement(\n                  'button',\n                  { type: 'button', className: 'btn btn-primary', onClick: this.showSignIn },\n                  gettext(\"Sign in\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return PasswordChangedPage;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this3, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this3 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this3), _this3.complete = function (apiResponse) {\n      _auth2.default.softSignOut();\n\n      // nuke \"redirect_to\" field so we don't end\n      // coming back to error page after sign in\n      $('#hidden-login-form input[name=\"redirect_to\"]').remove();\n\n      _reactDom2.default.render(_react2.default.createElement(PasswordChangedPage, { user: apiResponse }), document.getElementById('page-mount'));\n    }, _temp), _possibleConstructorReturn(_this3, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(ResetPasswordForm, { callback: this.complete });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":85,\"../services/ajax\":91,\"../services/auth\":92,\"../services/modal\":97,\"../services/snackbar\":99,\"../utils/banned-page\":102,\"../utils/validators\":109,\"./button\":51,\"./form\":58,\"./sign-in.js\":74,\"react\":\"react\",\"react-dom\":\"react-dom\"}],73:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.change = function (value) {\n      return function () {\n        _this.props.onChange({\n          target: {\n            value: value\n          }\n        });\n      };\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: \"getChoice\",\n    value: function getChoice() {\n      var _this2 = this;\n\n      var choice = null;\n      this.props.choices.map(function (item) {\n        if (item.value === _this2.props.value) {\n          choice = item;\n        }\n      });\n      return choice;\n    }\n  }, {\n    key: \"getIcon\",\n    value: function getIcon() {\n      return this.getChoice().icon;\n    }\n  }, {\n    key: \"getLabel\",\n    value: function getLabel() {\n      return this.getChoice().label;\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: \"render\",\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      var _this3 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: \"btn-group btn-select-group\" },\n        _react2.default.createElement(\n          \"button\",\n          { type: \"button\",\n            className: \"btn btn-select dropdown-toggle\",\n            id: this.props.id || null,\n            \"data-toggle\": \"dropdown\",\n            \"aria-haspopup\": \"true\",\n            \"aria-expanded\": \"false\",\n            \"aria-describedby\": this.props['aria-describedby'] || null,\n            disabled: this.props.disabled || false },\n          _react2.default.createElement(\n            \"span\",\n            { className: \"material-icon\" },\n            this.getIcon()\n          ),\n          this.getLabel()\n        ),\n        _react2.default.createElement(\n          \"ul\",\n          { className: \"dropdown-menu\" },\n          this.props.choices.map(function (item, i) {\n            return _react2.default.createElement(\n              \"li\",\n              { key: i },\n              _react2.default.createElement(\n                \"button\",\n                { type: \"button\", className: \"btn-link\",\n                  onClick: _this3.change(item.value) },\n                _react2.default.createElement(\n                  \"span\",\n                  { className: \"material-icon\" },\n                  item.icon\n                ),\n                item.label\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],74:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n      'showActivation': false,\n\n      'username': '',\n      'password': '',\n\n      'validators': {\n        'username': [],\n        'password': []\n      }\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'clean',\n    value: function clean() {\n      if (!this.isValid()) {\n        _snackbar2.default.error(gettext(\"Fill out both fields.\"));\n        return false;\n      } else {\n        return true;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('AUTH_API'), {\n        'username': this.state.username,\n        'password': this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      var form = $('#hidden-login-form');\n\n      form.append('<input type=\"text\" name=\"username\" />');\n      form.append('<input type=\"password\" name=\"password\" />');\n\n      // fill out form with user credentials and submit it, this will tell\n      // Misago to redirect user back to right page, and will trigger browser's\n      // key ring feature\n      form.find('input[type=\"hidden\"]').val(_ajax2.default.getCsrfToken());\n      form.find('input[name=\"redirect_to\"]').val(window.location.pathname);\n      form.find('input[name=\"username\"]').val(this.state.username);\n      form.find('input[name=\"password\"]').val(this.state.password);\n      form.submit();\n\n      // keep form loading\n      this.setState({\n        'isLoading': true\n      });\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.code === 'inactive_admin') {\n          _snackbar2.default.info(rejection.detail);\n        } else if (rejection.code === 'inactive_user') {\n          _snackbar2.default.info(rejection.detail);\n          this.setState({\n            'showActivation': true\n          });\n        } else if (rejection.code === 'banned') {\n          (0, _bannedPage2.default)(rejection.detail);\n          _modal2.default.hide();\n        } else {\n          _snackbar2.default.error(rejection.detail);\n        }\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n        _modal2.default.hide();\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'getActivationButton',\n    value: function getActivationButton() {\n      if (this.state.showActivation) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: _index2.default.get('REQUEST_ACTIVATION_URL'),\n            className: 'btn btn-success btn-block' },\n          gettext(\"Activate account\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-sm modal-sign-in',\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Sign in\")\n            )\n          ),\n          _react2.default.createElement(\n            'form',\n            { onSubmit: this.handleSubmit },\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-body' },\n              _react2.default.createElement(\n                'div',\n                { className: 'form-group' },\n                _react2.default.createElement(\n                  'div',\n                  { className: 'control-input' },\n                  _react2.default.createElement('input', { id: 'id_username', className: 'form-control', type: 'text',\n                    disabled: this.state.isLoading,\n                    placeholder: gettext(\"Username or e-mail\"),\n                    onChange: this.bindInput('username'),\n                    value: this.state.username })\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'form-group' },\n                _react2.default.createElement(\n                  'div',\n                  { className: 'control-input' },\n                  _react2.default.createElement('input', { id: 'id_password', className: 'form-control', type: 'password',\n                    disabled: this.state.isLoading,\n                    placeholder: gettext(\"Password\"),\n                    onChange: this.bindInput('password'),\n                    value: this.state.password })\n                )\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-footer' },\n              this.getActivationButton(),\n              _react2.default.createElement(\n                _button2.default,\n                { className: 'btn-primary btn-block',\n                  loading: this.state.isLoading },\n                gettext(\"Sign in\")\n              ),\n              _react2.default.createElement(\n                'a',\n                { href: _index2.default.get('FORGOTTEN_PASSWORD_URL'),\n                  className: 'btn btn-default btn-block' },\n                gettext(\"Forgot password?\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../index\":85,\"../services/ajax\":91,\"../services/modal\":97,\"../services/snackbar\":99,\"../utils/banned-page\":102,\"./button\":51,\"./form\":58,\"react\":\"react\"}],75:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Snackbar = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/* jshint ignore:start */\nvar TYPES_CLASSES = {\n  'info': 'alert-info',\n  'success': 'alert-success',\n  'warning': 'alert-warning',\n  'error': 'alert-danger'\n};\n/* jshint ignore:end */\n\nvar Snackbar = exports.Snackbar = function (_React$Component) {\n  _inherits(Snackbar, _React$Component);\n\n  function Snackbar() {\n    _classCallCheck(this, Snackbar);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Snackbar).apply(this, arguments));\n  }\n\n  _createClass(Snackbar, [{\n    key: 'getSnackbarClass',\n    value: function getSnackbarClass() {\n      var snackbarClass = 'alerts-snackbar';\n      if (this.props.isVisible) {\n        snackbarClass += ' in';\n      } else {\n        snackbarClass += ' out';\n      }\n      return snackbarClass;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getSnackbarClass() },\n        _react2.default.createElement(\n          'p',\n          { className: 'alert ' + TYPES_CLASSES[this.props.type] },\n          this.props.message\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Snackbar;\n}(_react2.default.Component);\n\nfunction select(state) {\n  return state.snackbar;\n}\n\n},{\"react\":\"react\"}],76:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactGuestNav = exports.GuestNav = exports.GuestMenu = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _registerButton = require('../register-button');\n\nvar _registerButton2 = _interopRequireDefault(_registerButton);\n\nvar _signIn = require('../sign-in.js');\n\nvar _signIn2 = _interopRequireDefault(_signIn);\n\nvar _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nvar _modal = require('../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar GuestMenu = exports.GuestMenu = function (_React$Component) {\n  _inherits(GuestMenu, _React$Component);\n\n  function GuestMenu() {\n    _classCallCheck(this, GuestMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestMenu).apply(this, arguments));\n  }\n\n  _createClass(GuestMenu, [{\n    key: 'showSignInModal',\n    value: function showSignInModal() {\n      _modal2.default.show(_signIn2.default);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu user-dropdown dropdown-menu-right',\n          role: 'menu' },\n        _react2.default.createElement(\n          'li',\n          { className: 'guest-preview' },\n          _react2.default.createElement(\n            'h4',\n            null,\n            gettext(\"You are browsing as guest.\")\n          ),\n          _react2.default.createElement(\n            'p',\n            null,\n            gettext('Sign in or register to start and participate in discussions.')\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-xs-6' },\n              _react2.default.createElement(\n                'button',\n                { type: 'button', className: 'btn btn-default btn-block',\n                  onClick: this.showSignInModal },\n                gettext(\"Sign in\")\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-xs-6' },\n              _react2.default.createElement(\n                _registerButton2.default,\n                { className: 'btn-primary btn-block' },\n                gettext(\"Register\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GuestMenu;\n}(_react2.default.Component);\n\nvar GuestNav = exports.GuestNav = function (_GuestMenu) {\n  _inherits(GuestNav, _GuestMenu);\n\n  function GuestNav() {\n    _classCallCheck(this, GuestNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestNav).apply(this, arguments));\n  }\n\n  _createClass(GuestNav, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'nav nav-guest' },\n        _react2.default.createElement(\n          'button',\n          { type: 'button', className: 'btn navbar-btn btn-default',\n            onClick: this.showSignInModal },\n          gettext(\"Sign in\")\n        ),\n        _react2.default.createElement(\n          _registerButton2.default,\n          { className: 'navbar-btn btn-primary' },\n          gettext(\"Register\")\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GuestNav;\n}(GuestMenu);\n\nvar CompactGuestNav = exports.CompactGuestNav = function (_React$Component2) {\n  _inherits(CompactGuestNav, _React$Component2);\n\n  function CompactGuestNav() {\n    _classCallCheck(this, CompactGuestNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactGuestNav).apply(this, arguments));\n  }\n\n  _createClass(CompactGuestNav, [{\n    key: 'showGuestMenu',\n    value: function showGuestMenu() {\n      _mobileNavbarDropdown2.default.show(GuestMenu);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showGuestMenu },\n        _react2.default.createElement(_avatar2.default, { size: '64' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactGuestNav;\n}(_react2.default.Component);\n\n},{\"../../services/mobile-navbar-dropdown\":96,\"../../services/modal\":97,\"../avatar\":49,\"../register-button\":68,\"../sign-in.js\":74,\"react\":\"react\"}],77:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactUserMenu = exports.UserMenu = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _guestNav = require('./guest-nav');\n\nvar _userNav = require('./user-nav');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar UserMenu = exports.UserMenu = function (_React$Component) {\n  _inherits(UserMenu, _React$Component);\n\n  function UserMenu() {\n    _classCallCheck(this, UserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));\n  }\n\n  _createClass(UserMenu, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.props.isAuthenticated) {\n        return _react2.default.createElement(_userNav.UserNav, { user: this.props.user });\n      } else {\n        return _react2.default.createElement(_guestNav.GuestNav, null);\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserMenu;\n}(_react2.default.Component);\n\nvar CompactUserMenu = exports.CompactUserMenu = function (_React$Component2) {\n  _inherits(CompactUserMenu, _React$Component2);\n\n  function CompactUserMenu() {\n    _classCallCheck(this, CompactUserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserMenu).apply(this, arguments));\n  }\n\n  _createClass(CompactUserMenu, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.props.isAuthenticated) {\n        return _react2.default.createElement(_userNav.CompactUserNav, { user: this.props.user });\n      } else {\n        return _react2.default.createElement(_guestNav.CompactGuestNav, null);\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactUserMenu;\n}(_react2.default.Component);\n\nfunction select(state) {\n  return state.auth;\n}\n\n},{\"./guest-nav\":76,\"./user-nav\":78,\"react\":\"react\"}],78:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactUserNav = exports.UserNav = exports.UserMenu = undefined;\nexports.selectUserMenu = selectUserMenu;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _root = require('../change-avatar/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nvar _modal = require('../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar UserMenu = exports.UserMenu = function (_React$Component) {\n  _inherits(UserMenu, _React$Component);\n\n  function UserMenu() {\n    _classCallCheck(this, UserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));\n  }\n\n  _createClass(UserMenu, [{\n    key: 'logout',\n    value: function logout() {\n      var decision = confirm(gettext(\"Are you sure you want to sign out?\"));\n      if (decision) {\n        $('#hidden-logout-form').submit();\n      }\n    }\n  }, {\n    key: 'changeAvatar',\n    value: function changeAvatar() {\n      _modal2.default.show((0, _reactRedux.connect)(_root.select)(_root2.default));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu user-dropdown dropdown-menu-right',\n          role: 'menu' },\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-header' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            this.props.user.username\n          )\n        ),\n        _react2.default.createElement('li', { className: 'divider' }),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'account_circle'\n            ),\n            gettext(\"See your profile\")\n          )\n        ),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('USERCP_URL') },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'done_all'\n            ),\n            gettext(\"Change options\")\n          )\n        ),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link', onClick: this.changeAvatar },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'portrait'\n            ),\n            gettext(\"Change avatar\")\n          )\n        ),\n        _react2.default.createElement('li', { className: 'divider' }),\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-footer' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default btn-block',\n              onClick: this.logout },\n            gettext(\"Log out\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserMenu;\n}(_react2.default.Component);\n\nvar UserNav = exports.UserNav = function (_React$Component2) {\n  _inherits(UserNav, _React$Component2);\n\n  function UserNav() {\n    _classCallCheck(this, UserNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserNav).apply(this, arguments));\n  }\n\n  _createClass(UserNav, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'ul nav navbar-nav nav-user' },\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown' },\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url, className: 'dropdown-toggle',\n              'data-toggle': 'dropdown', 'aria-haspopup': 'true', 'aria-expanded': 'false',\n              role: 'button' },\n            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })\n          ),\n          _react2.default.createElement(UserMenu, { user: this.props.user })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserNav;\n}(_react2.default.Component);\n\nfunction selectUserMenu(state) {\n  return { user: state.auth.user };\n}\n\nvar CompactUserNav = exports.CompactUserNav = function (_React$Component3) {\n  _inherits(CompactUserNav, _React$Component3);\n\n  function CompactUserNav() {\n    _classCallCheck(this, CompactUserNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserNav).apply(this, arguments));\n  }\n\n  _createClass(CompactUserNav, [{\n    key: 'showUserMenu',\n    value: function showUserMenu() {\n      _mobileNavbarDropdown2.default.showConnected('user-menu', (0, _reactRedux.connect)(selectUserMenu)(UserMenu));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showUserMenu },\n        _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactUserNav;\n}(_react2.default.Component);\n\n},{\"../../index\":85,\"../../services/mobile-navbar-dropdown\":96,\"../../services/modal\":97,\"../avatar\":49,\"../change-avatar/root\":55,\"react\":\"react\",\"react-redux\":\"react-redux\"}],79:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.StatusLabel = exports.StatusIcon = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClass',\n    value: function getClass() {\n      var status = '';\n      if (this.props.status.is_banned) {\n        status = 'banned';\n      } else if (this.props.status.is_hidden) {\n        status = 'offline';\n      } else if (this.props.status.is_online_hidden) {\n        status = 'online';\n      } else if (this.props.status.is_offline_hidden) {\n        status = 'offline';\n      } else if (this.props.status.is_online) {\n        status = 'online';\n      } else if (this.props.status.is_offline) {\n        status = 'offline';\n      }\n\n      return 'user-status user-' + status;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'span',\n        { className: this.getClass() },\n        this.props.children\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\nvar StatusIcon = exports.StatusIcon = function (_React$Component2) {\n  _inherits(StatusIcon, _React$Component2);\n\n  function StatusIcon() {\n    _classCallCheck(this, StatusIcon);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusIcon).apply(this, arguments));\n  }\n\n  _createClass(StatusIcon, [{\n    key: 'getIcon',\n    value: function getIcon() {\n      if (this.props.status.is_banned) {\n        return 'remove_circle_outline';\n      } else if (this.props.status.is_hidden) {\n        return 'help_outline';\n      } else if (this.props.status.is_online_hidden) {\n        return 'label';\n      } else if (this.props.status.is_offline_hidden) {\n        return 'label_outline';\n      } else if (this.props.status.is_online) {\n        return 'lens';\n      } else if (this.props.status.is_offline) {\n        return 'panorama_fish_eye';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'span',\n        { className: 'material-icon status-icon' },\n        this.getIcon()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return StatusIcon;\n}(_react2.default.Component);\n\nvar StatusLabel = exports.StatusLabel = function (_React$Component3) {\n  _inherits(StatusLabel, _React$Component3);\n\n  function StatusLabel() {\n    _classCallCheck(this, StatusLabel);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusLabel).apply(this, arguments));\n  }\n\n  _createClass(StatusLabel, [{\n    key: 'getHelp',\n    value: function getHelp() {\n      if (this.props.status.is_banned) {\n        if (this.props.status.banned_until) {\n          return interpolate(gettext(\"%(username)s is hiding banned until %(ban_expires)s\"), {\n            username: this.props.user.username,\n            ban_expires: this.props.status.banned_until.format('LL, LT')\n          }, true);\n        } else {\n          return interpolate(gettext(\"%(username)s is hiding banned\"), {\n            username: this.props.user.username\n          }, true);\n        }\n      } else if (this.props.status.is_hidden) {\n        return interpolate(gettext(\"%(username)s is hiding activity\"), {\n          username: this.props.user.username\n        }, true);\n      } else if (this.props.status.is_online_hidden) {\n        return interpolate(gettext(\"%(username)s is online (hidden)\"), {\n          username: this.props.user.username\n        }, true);\n      } else if (this.props.status.is_offline_hidden) {\n        return interpolate(gettext(\"%(username)s was last seen %(last_click)s (hidden)\"), {\n          username: this.props.user.username,\n          last_click: this.props.status.last_click.fromNow()\n        }, true);\n      } else if (this.props.status.is_online) {\n        return interpolate(gettext(\"%(username)s is online\"), {\n          username: this.props.user.username\n        }, true);\n      } else if (this.props.status.is_offline) {\n        return interpolate(gettext(\"%(username)s was last seen %(last_click)s\"), {\n          username: this.props.user.username,\n          last_click: this.props.status.last_click.fromNow()\n        }, true);\n      }\n    }\n  }, {\n    key: 'getLabel',\n    value: function getLabel() {\n      if (this.props.status.is_banned) {\n        return gettext(\"Banned\");\n      } else if (this.props.status.is_hidden) {\n        return gettext(\"Hiding activity\");\n      } else if (this.props.status.is_online_hidden) {\n        return gettext(\"Online (hidden)\");\n      } else if (this.props.status.is_offline_hidden) {\n        return gettext(\"Offline (hidden)\");\n      } else if (this.props.status.is_online) {\n        return gettext(\"Online\");\n      } else if (this.props.status.is_offline) {\n        return gettext(\"Offline\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'span',\n        { className: this.props.className || \"status-label\",\n          title: this.getHelp() },\n        this.getLabel()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return StatusLabel;\n}(_react2.default.Component);\n\n},{\"react\":\"react\"}],80:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.NoActivePosters = exports.ActivePostersLoading = exports.ActivePosters = exports.ActivePoster = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _userStatus = require('../user-status');\n\nvar _userStatus2 = _interopRequireDefault(_userStatus);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../reducers/users');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _random = require('../../utils/random');\n\nvar random = _interopRequireWildcard(_random);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar ActivePoster = exports.ActivePoster = function (_React$Component) {\n  _inherits(ActivePoster, _React$Component);\n\n  function ActivePoster() {\n    _classCallCheck(this, ActivePoster);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ActivePoster).apply(this, arguments));\n  }\n\n  _createClass(ActivePoster, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.rank.css_class) {\n        return \"list-group-item list-group-rank-\" + this.props.rank.css_class;\n      } else {\n        return \"list-group-item\";\n      }\n    }\n  }, {\n    key: 'getUserStatus',\n    value: function getUserStatus() {\n      if (this.props.user.status) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _userStatus2.default,\n          { user: this.props.user, status: this.props.user.status },\n          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,\n            status: this.props.user.status }),\n          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,\n            status: this.props.user.status,\n            className: 'status-label hidden-xs hidden-sm' })\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'user-status' },\n            _react2.default.createElement(\n              'span',\n              { className: 'status-icon ui-preview' },\n              ' '\n            ),\n            _react2.default.createElement(\n              'span',\n              { className: 'status-label ui-preview hidden-xs hidden-sm' },\n              ' '\n            )\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getRankName',\n    value: function getRankName() {\n      if (this.props.rank.is_tab) {\n        /* jshint ignore:start */\n        var rankUrl = _index2.default.get('USERS_LIST_URL') + this.props.rank.slug + '/';\n        return _react2.default.createElement(\n          _reactRouter.Link,\n          { to: rankUrl, className: 'rank-name' },\n          this.props.rank.name\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'rank-name' },\n            this.props.rank.name\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getUserTitle',\n    value: function getUserTitle() {\n      if (this.props.user.title) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'user-title hidden-xs hidden-sm' },\n          this.props.user.title\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'li',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-user-avatar' },\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url },\n            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '50' })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-user' },\n          _react2.default.createElement(\n            'div',\n            { className: 'user-name' },\n            _react2.default.createElement(\n              'a',\n              { href: this.props.user.absolute_url, className: 'item-title' },\n              this.props.user.username\n            )\n          ),\n          this.getUserStatus(),\n          this.getRankName(),\n          this.getUserTitle()\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-position' },\n          _react2.default.createElement(\n            'div',\n            { className: 'stat-value' },\n            '#',\n            this.props.counter\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'text-muted' },\n            gettext(\"Rank\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-posts-counted' },\n          _react2.default.createElement(\n            'div',\n            { className: 'stat-value' },\n            this.props.user.meta.score\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'text-muted' },\n            gettext(\"Ranked posts\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-posts-total' },\n          _react2.default.createElement(\n            'div',\n            { className: 'stat-value' },\n            this.props.user.posts\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'text-muted' },\n            gettext(\"Total posts\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ActivePoster;\n}(_react2.default.Component);\n\nvar ActivePosters = exports.ActivePosters = function (_React$Component2) {\n  _inherits(ActivePosters, _React$Component2);\n\n  function ActivePosters() {\n    _classCallCheck(this, ActivePosters);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ActivePosters).apply(this, arguments));\n  }\n\n  _createClass(ActivePosters, [{\n    key: 'getLeadMessage',\n    value: function getLeadMessage() {\n      var message = ngettext(\"%(posters)s most active poster from last %(days)s days.\", \"%(posters)s most active posters from last %(days)s days.\", this.props.count);\n\n      return interpolate(message, {\n        posters: this.props.count,\n        days: this.props.trackedPeriod\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'active-posters-list' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.getLeadMessage()\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'active-posters ui-ready' },\n            _react2.default.createElement(\n              'ul',\n              { className: 'list-group' },\n              this.props.users.map(function (user, i) {\n                return _react2.default.createElement(ActivePoster, { user: user,\n                  rank: user.rank,\n                  counter: i + 1,\n                  key: user.id });\n              })\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ActivePosters;\n}(_react2.default.Component);\n\nvar ActivePostersLoading = exports.ActivePostersLoading = function (_React$Component3) {\n  _inherits(ActivePostersLoading, _React$Component3);\n\n  function ActivePostersLoading() {\n    _classCallCheck(this, ActivePostersLoading);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ActivePostersLoading).apply(this, arguments));\n  }\n\n  _createClass(ActivePostersLoading, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'active-posters-list' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead ui-preview-paragraph' },\n            random.range(3, 4).map(function (i) {\n              return _react2.default.createElement(\n                'span',\n                { key: i, className: 'ui-preview-text', style: { width: random.int(50, 120) + \"px\" } },\n                ' '\n              );\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'active-posters ui-preview' },\n            _react2.default.createElement(\n              'ul',\n              { className: 'list-group' },\n              random.range(5, 10).map(function (i, counter) {\n                return _react2.default.createElement(\n                  'li',\n                  { key: i, className: 'list-group-item' },\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-user-avatar' },\n                    _react2.default.createElement(\n                      'span',\n                      null,\n                      _react2.default.createElement(_avatar2.default, { size: '50' })\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-user' },\n                    _react2.default.createElement(\n                      'div',\n                      { className: 'user-name' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'item-title' },\n                        _react2.default.createElement(\n                          'span',\n                          { className: 'ui-preview-text', style: { width: random.int(30, 80) + \"px\" } },\n                          ' '\n                        )\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'user-status' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'status-icon ui-preview' },\n                        ' '\n                      ),\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'status-label ui-preview hidden-xs hidden-sm' },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'rank-name' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'user-title hidden-xs hidden-sm' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                        ' '\n                      )\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-position' },\n                    _react2.default.createElement(\n                      'div',\n                      { className: 'stat-value' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: \"30px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'div',\n                      { className: 'text-muted' },\n                      gettext(\"Rank\")\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-posts-counted' },\n                    _react2.default.createElement(\n                      'div',\n                      { className: 'stat-value' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: \"30px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'div',\n                      { className: 'text-muted' },\n                      gettext(\"Ranked posts\")\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-posts-total' },\n                    _react2.default.createElement(\n                      'div',\n                      { className: 'stat-value' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: \"30px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'div',\n                      { className: 'text-muted' },\n                      gettext(\"Total posts\")\n                    )\n                  )\n                );\n              })\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ActivePostersLoading;\n}(_react2.default.Component);\n\nvar NoActivePosters = exports.NoActivePosters = function (_React$Component4) {\n  _inherits(NoActivePosters, _React$Component4);\n\n  function NoActivePosters() {\n    _classCallCheck(this, NoActivePosters);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoActivePosters).apply(this, arguments));\n  }\n\n  _createClass(NoActivePosters, [{\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      return interpolate(gettext(\"No users have posted any new messages during last %(days)s days.\"), { 'days': this.props.trackedPeriod }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'active-posters-list' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.getEmptyMessage()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return NoActivePosters;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component5) {\n  _inherits(_class, _React$Component5);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this5 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    if (_index2.default.has('USERS')) {\n      _this5.initWithPreloadedData(_index2.default.pop('USERS'));\n    } else {\n      _this5.initWithoutPreloadedData();\n    }\n\n    _this5.poolId = null;\n    _this5.startPooling();\n    return _this5;\n  }\n\n  _createClass(_class, [{\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(data) {\n      this.state = {\n        isLoaded: true,\n\n        trackedPeriod: data.tracked_period,\n        count: data.count\n      };\n\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false\n      };\n    }\n  }, {\n    key: 'startPooling',\n    value: function startPooling() {\n      var _this6 = this;\n\n      var poolServer = function poolServer() {\n        _ajax2.default.get(_index2.default.get('USERS_API'), { list: 'active' }).then(function (data) {\n          _this6.setState({\n            isLoaded: true,\n\n            trackedPeriod: data.tracked_period,\n            count: data.count\n          });\n\n          _store2.default.dispatch((0, _users.dehydrate)(data.results));\n\n          _this6.poolId = window.setTimeout(poolServer, 90 * 1000);\n        });\n      };\n\n      poolServer();\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: this.props.route.extra.name,\n        parent: gettext(\"Users\")\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      if (this.poolId) {\n        window.clearTimeout(this.poolId);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      if (this.state.isLoaded) {\n        if (this.state.count > 0) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ActivePosters, { users: this.props.users,\n            trackedPeriod: this.state.trackedPeriod,\n            count: this.state.count });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(NoActivePosters, { trackedPeriod: this.state.trackedPeriod });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ActivePostersLoading, null);\n          /* jshint ignore:end */\n        }\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":85,\"../../reducers/users\":90,\"../../services/ajax\":91,\"../../services/page-title\":98,\"../../services/store\":100,\"../../utils/random\":107,\"../avatar\":49,\"../user-status\":79,\"react\":\"react\",\"react-router\":\"react-router\"}],81:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.TabsNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n//jshint ignore:line\n\n//jshint ignore:line\n\n// jshint ignore:start\nvar listUrl = function listUrl(baseUrl, list) {\n  var url = baseUrl;\n  if (list.component === 'rank') {\n    url += list.slug;\n  } else {\n    url += list.component;\n  }\n  return url + '/';\n};\n\nvar navLinks = function navLinks(baseUrl, lists) {\n  return lists.map(function (list) {\n    var url = listUrl(baseUrl, list);\n    return _react2.default.createElement(\n      _li2.default,\n      { path: url,\n        key: url },\n      _react2.default.createElement(\n        _reactRouter.Link,\n        { to: url },\n        list.name\n      )\n    );\n  });\n};\n// jshint ignore:end\n\nvar TabsNav = exports.TabsNav = function (_React$Component) {\n  _inherits(TabsNav, _React$Component);\n\n  function TabsNav() {\n    _classCallCheck(this, TabsNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(TabsNav).apply(this, arguments));\n  }\n\n  _createClass(TabsNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'nav nav-pills' },\n        navLinks(this.props.baseUrl, this.props.lists)\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return TabsNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_React$Component2) {\n  _inherits(CompactNav, _React$Component2);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        navLinks(this.props.baseUrl, this.props.lists)\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(_react2.default.Component);\n\n},{\"../../index\":85,\"../li\":59,\"react\":\"react\",\"react-router\":\"react-router\"}],82:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: this.props.route.rank.name,\n        parent: gettext(\"Users\")\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          'Hello, this is users with rank list!'\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/page-title\":98,\"react\":\"react\"}],83:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.paths = paths;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _navs = require('./navs');\n\nvar _activePosters = require('./active-posters');\n\nvar _activePosters2 = _interopRequireDefault(_activePosters);\n\nvar _rank = require('./rank');\n\nvar _rank2 = _interopRequireDefault(_rank);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.toggleNav = function () {\n      if (_this.state.dropdown) {\n        _this.setState({\n          dropdown: false\n        });\n      } else {\n        _this.setState({\n          dropdown: true\n        });\n      }\n    };\n\n    _this.state = {\n      dropdown: false\n    };\n    return _this;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getToggleNavClassName',\n\n    /* jshint ignore:end */\n\n    value: function getToggleNavClassName() {\n      if (this.state.dropdown) {\n        return 'btn btn-default btn-icon open';\n      } else {\n        return 'btn btn-default btn-icon';\n      }\n    }\n  }, {\n    key: 'getCompactNavClassName',\n    value: function getCompactNavClassName() {\n      if (this.state.dropdown) {\n        return 'compact-nav open';\n      } else {\n        return 'compact-nav';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-users-lists' },\n        _react2.default.createElement(\n          'div',\n          { className: 'page-header tabbed' },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            _react2.default.createElement(\n              'h1',\n              { className: 'pull-left' },\n              gettext(\"Users\")\n            ),\n            _react2.default.createElement(\n              'button',\n              { className: 'btn btn-default btn-icon btn-dropdown-toggle hidden-md hidden-lg',\n                type: 'button',\n                onClick: this.toggleNav,\n                'aria-haspopup': 'true',\n                'aria-expanded': this.state.dropdown ? 'true' : 'false' },\n              _react2.default.createElement(\n                'i',\n                { className: 'material-icon' },\n                'menu'\n              )\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'page-tabs hidden-xs hidden-sm' },\n            _react2.default.createElement(\n              'div',\n              { className: 'container' },\n              _react2.default.createElement(_navs.TabsNav, { lists: _index2.default.get('USERS_LISTS'),\n                baseUrl: _index2.default.get('USERS_LIST_URL') })\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          _react2.default.createElement(_navs.CompactNav, { lists: _index2.default.get('USERS_LISTS'),\n            baseUrl: _index2.default.get('USERS_LIST_URL') })\n        ),\n        this.props.children\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user,\n    'users': store.users\n  };\n}\n\nfunction paths() {\n  var paths = [];\n\n  _index2.default.get('USERS_LISTS').forEach(function (item) {\n    if (item.component === 'rank') {\n      paths.push({\n        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/',\n        component: (0, _reactRedux.connect)(select)(_rank2.default),\n        rank: {\n          name: item.name,\n          slug: item.slug,\n          css_class: item.css_class,\n          description: item.description\n        }\n      });\n    } else if (item.component === 'active-posters') {\n      paths.push({\n        path: _index2.default.get('USERS_LIST_URL') + item.component + '/',\n        component: (0, _reactRedux.connect)(select)(_activePosters2.default),\n        extra: {\n          name: item.name\n        }\n      });\n    }\n  });\n\n  return paths;\n}\n\n},{\"../../index\":85,\"./active-posters\":80,\"./navs\":81,\"./rank\":82,\"react\":\"react\",\"react-redux\":\"react-redux\"}],84:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.toggle = function () {\n      _this.props.onChange({\n        target: {\n          value: !_this.props.value\n        }\n      });\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.value) {\n        return \"btn btn-yes-no btn-yes-no-on\";\n      } else {\n        return \"btn btn-yes-no btn-yes-no-off\";\n      }\n    }\n  }, {\n    key: \"getIcon\",\n    value: function getIcon() {\n      if (this.props.value) {\n        return this.props.iconOn || 'check_box';\n      } else {\n        return this.props.iconOff || 'check_box_outline_blank';\n      }\n    }\n  }, {\n    key: \"getLabel\",\n    value: function getLabel() {\n      if (this.props.value) {\n        return this.props.labelOn || gettext(\"yes\");\n      } else {\n        return this.props.labelOff || gettext(\"no\");\n      }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: \"render\",\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"button\",\n        { type: \"button\",\n          onClick: this.toggle,\n          className: this.getClassName(),\n          id: this.props.id || null,\n          \"aria-describedby\": this.props['aria-describedby'] || null,\n          disabled: this.props.disabled || false },\n        _react2.default.createElement(\n          \"span\",\n          { className: \"material-icon\" },\n          this.getIcon()\n        ),\n        this.getLabel()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],85:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Misago = undefined;\n\nvar _orderedList = require('./utils/ordered-list');\n\nvar _orderedList2 = _interopRequireDefault(_orderedList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Misago = exports.Misago = function () {\n  function Misago() {\n    _classCallCheck(this, Misago);\n\n    this._initializers = [];\n    this._context = {};\n  }\n\n  _createClass(Misago, [{\n    key: 'addInitializer',\n    value: function addInitializer(initializer) {\n      this._initializers.push({\n        key: initializer.name,\n\n        item: initializer.initializer,\n\n        after: initializer.after,\n        before: initializer.before\n      });\n    }\n  }, {\n    key: 'init',\n    value: function init(context) {\n      var _this = this;\n\n      this._context = context;\n\n      var initOrder = new _orderedList2.default(this._initializers).orderedValues();\n      initOrder.forEach(function (initializer) {\n        initializer(_this);\n      });\n    }\n\n    // context accessors\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      return !!this._context[key];\n    }\n  }, {\n    key: 'get',\n    value: function get(key, fallback) {\n      if (this.has(key)) {\n        return this._context[key];\n      } else {\n        return fallback || undefined;\n      }\n    }\n  }, {\n    key: 'pop',\n    value: function pop(key) {\n      if (this.has(key)) {\n        var value = this._context[key];\n        this._context[key] = null;\n        return value;\n      } else {\n        return undefined;\n      }\n    }\n  }]);\n\n  return Misago;\n}();\n\n// create  singleton\n\nvar misago = new Misago();\n\n// expose it globally\nglobal.misago = misago;\n\n// and export it for tests and stuff\nexports.default = misago;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./utils/ordered-list\":106}],86:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SIGN_OUT = exports.SIGN_IN = exports.PATCH_USER = exports.initialState = undefined;\nexports.patchUser = patchUser;\nexports.signIn = signIn;\nexports.signOut = signOut;\nexports.default = auth;\n\nvar _users = require('./users');\n\nvar initialState = exports.initialState = {\n  signedIn: false,\n  signedOut: false\n};\n\nvar PATCH_USER = exports.PATCH_USER = 'PATCH_USER';\nvar SIGN_IN = exports.SIGN_IN = 'SIGN_IN';\nvar SIGN_OUT = exports.SIGN_OUT = 'SIGN_OUT';\n\nfunction patchUser(patch) {\n  return {\n    type: PATCH_USER,\n    patch: patch\n  };\n}\n\nfunction signIn(user) {\n  return {\n    type: SIGN_IN,\n    user: user\n  };\n}\n\nfunction signOut() {\n  var soft = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n  return {\n    type: SIGN_OUT,\n    soft: soft\n  };\n}\n\nfunction auth() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case PATCH_USER:\n      var newState = Object.assign({}, state);\n      newState.user = Object.assign({}, state.user, action.patch);\n      return newState;\n\n    case SIGN_IN:\n      return Object.assign({}, state, {\n        signedIn: action.user\n      });\n\n    case SIGN_OUT:\n      return Object.assign({}, state, {\n        isAuthenticated: false,\n        isAnonymous: true,\n        signedOut: !action.soft\n      });\n\n    case _users.UPDATE_AVATAR:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        var _newState = Object.assign({}, state);\n        _newState.user = Object.assign({}, state.user, {\n          'avatar_hash': action.avatarHash\n        });\n        return _newState;\n      }\n      return state;\n\n    case _users.UPDATE_USERNAME:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        var _newState2 = Object.assign({}, state);\n        _newState2.user = Object.assign({}, state.user, {\n          username: action.username,\n          slug: action.slug\n        });\n        return _newState2;\n      }\n      return state;\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":90}],87:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.showSnackbar = showSnackbar;\nexports.hideSnackbar = hideSnackbar;\nexports.default = snackbar;\nvar initialState = exports.initialState = {\n  type: 'info',\n  message: '',\n  isVisible: false\n};\n\nvar SHOW_SNACKBAR = exports.SHOW_SNACKBAR = 'SHOW_SNACKBAR';\nvar HIDE_SNACKBAR = exports.HIDE_SNACKBAR = 'HIDE_SNACKBAR';\n\nfunction showSnackbar(message, type) {\n  return {\n    type: SHOW_SNACKBAR,\n    message: message,\n    messageType: type\n  };\n}\n\nfunction hideSnackbar() {\n  return {\n    type: HIDE_SNACKBAR\n  };\n}\n\nfunction snackbar() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  if (action.type === SHOW_SNACKBAR) {\n    return {\n      type: action.messageType,\n      message: action.message,\n      isVisible: true\n    };\n  } else if (action.type === HIDE_SNACKBAR) {\n    return Object.assign({}, state, {\n      isVisible: false\n    });\n  } else {\n    return state;\n  }\n}\n\n},{}],88:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.doTick = doTick;\nexports.default = tick;\nvar initialState = exports.initialState = {\n  tick: 0\n};\n\nvar TICK = exports.TICK = 'TICK';\n\nfunction doTick() {\n  return {\n    type: TICK\n  };\n}\n\nfunction tick() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  if (action.type === TICK) {\n    return Object.assign({}, state, {\n      tick: state.tick + 1\n    });\n  } else {\n    return state;\n  }\n}\n\n},{}],89:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DEHYDRATE_RESULT = exports.ADD_NAME_CHANGE = undefined;\nexports.addNameChange = addNameChange;\nexports.dehydrate = dehydrate;\nexports.default = username;\n\nvar _users = require('./users');\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ADD_NAME_CHANGE = exports.ADD_NAME_CHANGE = 'ADD_NAME_CHANGE';\nvar DEHYDRATE_RESULT = exports.DEHYDRATE_RESULT = 'DEHYDRATE_RESULT';\n\nfunction addNameChange(change, user, changedBy) {\n  return {\n    type: ADD_NAME_CHANGE,\n    change: change,\n    user: user,\n    changedBy: changedBy\n  };\n}\n\nfunction dehydrate(items) {\n  return {\n    type: DEHYDRATE_RESULT,\n    items: items\n  };\n}\n\nfunction username() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case ADD_NAME_CHANGE:\n      var newState = state.slice();\n      newState.unshift({\n        id: Math.floor(Date.now() / 1000), // just small hax for getting id\n        changed_by: action.changedBy,\n        changed_by_username: action.changedBy.username,\n        changed_on: (0, _moment2.default)(),\n        new_username: action.change.username,\n        old_username: action.user.username\n      });\n      return newState;\n\n    case DEHYDRATE_RESULT:\n      return action.items.map(function (item) {\n        return Object.assign({}, item, {\n          changed_on: (0, _moment2.default)(item.changed_on)\n        });\n      });\n\n    case _users.UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            'avatar_hash': action.avatarHash\n          });\n        }\n\n        return Object.assign({}, item);\n      });\n\n    case _users.UPDATE_USERNAME:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            'username': action.username,\n            'slug': action.slug\n          });\n        }\n\n        return Object.assign({}, item);\n      });\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":90,\"moment\":\"moment\"}],90:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.UPDATE_USERNAME = exports.UPDATE_AVATAR = exports.DEHYDRATE_RESULT = undefined;\nexports.dehydrate = dehydrate;\nexports.updateAvatar = updateAvatar;\nexports.updateUsername = updateUsername;\nexports.default = user;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DEHYDRATE_RESULT = exports.DEHYDRATE_RESULT = 'DEHYDRATE_RESULT';\nvar UPDATE_AVATAR = exports.UPDATE_AVATAR = 'UPDATE_AVATAR';\nvar UPDATE_USERNAME = exports.UPDATE_USERNAME = 'UPDATE_USERNAME';\n\nfunction dehydrate(items) {\n  return {\n    type: DEHYDRATE_RESULT,\n    items: items\n  };\n}\n\nfunction updateAvatar(user, avatarHash) {\n  return {\n    type: UPDATE_AVATAR,\n    userId: user.id,\n    avatarHash: avatarHash\n  };\n}\n\nfunction updateUsername(user, username, slug) {\n  return {\n    type: UPDATE_USERNAME,\n    userId: user.id,\n    username: username,\n    slug: slug\n  };\n}\n\nfunction user() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case DEHYDRATE_RESULT:\n      return action.items.map(function (item) {\n        var status = item.status || null;\n        if (status) {\n          status = Object.assign({}, status, {\n            last_click: status.last_click ? (0, _moment2.default)(status.last_click) : null,\n            banned_until: status.banned_until ? (0, _moment2.default)(status.banned_until) : null\n          });\n        }\n\n        return Object.assign({}, item, {\n          status: status\n        });\n      });\n\n    default:\n      return state;\n  }\n}\n\n},{\"moment\":\"moment\"}],91:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Ajax = exports.Ajax = function () {\n  function Ajax() {\n    _classCallCheck(this, Ajax);\n\n    this._cookieName = null;\n    this._csrfToken = null;\n  }\n\n  _createClass(Ajax, [{\n    key: 'init',\n    value: function init(cookieName) {\n      this._cookieName = cookieName;\n      this._csrfToken = this.getCsrfToken();\n    }\n  }, {\n    key: 'getCsrfToken',\n    value: function getCsrfToken() {\n      if (document.cookie.indexOf(this._cookieName) !== -1) {\n        var cookieRegex = new RegExp(this._cookieName + '\\=([^;]*)');\n        var cookie = document.cookie.match(cookieRegex)[0];\n        return cookie ? cookie.split('=')[1] : null;\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: 'request',\n    value: function request(method, url, data) {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        var xhr = {\n          url: url,\n          method: method,\n          headers: {\n            'X-CSRFToken': self._csrfToken\n          },\n\n          data: data ? JSON.stringify(data) : null,\n          contentType: \"application/json; charset=utf-8\",\n          dataType: 'json',\n\n          success: function success(data) {\n            resolve(data);\n          },\n\n          error: function error(jqXHR) {\n            var rejection = jqXHR.responseJSON || {};\n\n            rejection.status = jqXHR.status;\n\n            if (rejection.status === 0) {\n              rejection.detail = gettext(\"Lost connection with application.\");\n            }\n\n            rejection.statusText = jqXHR.statusText;\n\n            reject(rejection);\n          }\n        };\n\n        $.ajax(xhr);\n      });\n    }\n  }, {\n    key: 'get',\n    value: function get(url, params) {\n      if (params) {\n        url += '?' + $.param(params);\n      }\n      return this.request('GET', url);\n    }\n  }, {\n    key: 'post',\n    value: function post(url, data) {\n      return this.request('POST', url, data);\n    }\n  }, {\n    key: 'patch',\n    value: function patch(url, data) {\n      return this.request('PATCH', url, data);\n    }\n  }, {\n    key: 'put',\n    value: function put(url, data) {\n      return this.request('PUT', url, data);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(url) {\n      return this.request('DELETE', url);\n    }\n  }, {\n    key: 'upload',\n    value: function upload(url, data, progress) {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        var xhr = {\n          url: url,\n          method: 'POST',\n          headers: {\n            'X-CSRFToken': self._csrfToken\n          },\n\n          data: data,\n          contentType: false,\n          processData: false,\n\n          xhr: function xhr() {\n            var xhr = new window.XMLHttpRequest();\n            xhr.upload.addEventListener(\"progress\", function (evt) {\n              if (evt.lengthComputable) {\n                progress(Math.round(evt.loaded / evt.total * 100));\n              }\n            }, false);\n            return xhr;\n          },\n\n          success: function success(response) {\n            resolve(response);\n          },\n\n          error: function error(jqXHR) {\n            var rejection = jqXHR.responseJSON || {};\n\n            rejection.status = jqXHR.status;\n\n            if (rejection.status === 0) {\n              rejection.detail = gettext(\"Lost connection with application.\");\n            }\n\n            rejection.statusText = jqXHR.statusText;\n\n            reject(rejection);\n          }\n        };\n\n        $.ajax(xhr);\n      });\n    }\n  }]);\n\n  return Ajax;\n}();\n\nexports.default = new Ajax();\n\n},{}],92:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Auth = undefined;\n\nvar _auth = require('../reducers/auth');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// jshint ignore:line\n\nvar Auth = exports.Auth = function () {\n  function Auth() {\n    _classCallCheck(this, Auth);\n  }\n\n  _createClass(Auth, [{\n    key: 'init',\n    value: function init(store, local, modal) {\n      this._store = store;\n      this._local = local;\n      this._modal = modal;\n\n      // tell other tabs what auth state is because we are most current with it\n      this.syncSession();\n\n      // listen for other tabs to tell us that state changed\n      this.watchState();\n    }\n  }, {\n    key: 'syncSession',\n    value: function syncSession() {\n      var state = this._store.getState().auth;\n      if (state.isAuthenticated) {\n        this._local.set('auth', {\n          isAuthenticated: true,\n          username: state.user.username\n        });\n      } else {\n        this._local.set('auth', {\n          isAuthenticated: false\n        });\n      }\n    }\n  }, {\n    key: 'watchState',\n    value: function watchState() {\n      var _this = this;\n\n      this._local.watch('auth', function (newState) {\n        if (newState.isAuthenticated) {\n          _this._store.dispatch((0, _auth.signIn)({\n            username: newState.username\n          }));\n        } else {\n          _this._store.dispatch((0, _auth.signOut)());\n        }\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'signIn',\n    value: function signIn(user) {\n      this._store.dispatch((0, _auth.signIn)(user));\n      this._local.set('auth', {\n        isAuthenticated: true,\n        username: user.username\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'signOut',\n    value: function signOut() {\n      this._store.dispatch((0, _auth.signOut)());\n      this._local.set('auth', {\n        isAuthenticated: false\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'softSignOut',\n    value: function softSignOut() {\n      this._store.dispatch((0, _auth.signOut)(true));\n      this._local.set('auth', {\n        isAuthenticated: false\n      });\n      this._modal.hide();\n    }\n  }]);\n\n  return Auth;\n}();\n\nexports.default = new Auth();\n\n},{\"../reducers/auth\":86}],93:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global grecaptcha */\n// jshint ignore:line\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Captcha = exports.ReCaptcha = exports.ReCaptchaComponent = exports.QACaptcha = exports.NoCaptcha = exports.BaseCaptcha = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _formGroup = require('../components/form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// jshint ignore:line\n\nvar BaseCaptcha = exports.BaseCaptcha = function () {\n  function BaseCaptcha() {\n    _classCallCheck(this, BaseCaptcha);\n  }\n\n  _createClass(BaseCaptcha, [{\n    key: 'init',\n    value: function init(context, ajax, include, snackbar) {\n      this._context = context;\n      this._ajax = ajax;\n      this._include = include;\n      this._snackbar = snackbar;\n    }\n  }]);\n\n  return BaseCaptcha;\n}();\n\nvar NoCaptcha = exports.NoCaptcha = function (_BaseCaptcha) {\n  _inherits(NoCaptcha, _BaseCaptcha);\n\n  function NoCaptcha() {\n    _classCallCheck(this, NoCaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoCaptcha).apply(this, arguments));\n  }\n\n  _createClass(NoCaptcha, [{\n    key: 'load',\n    value: function load() {\n      return new Promise(function (resolve) {\n        // immediately resolve as we don't have anything to validate\n        resolve();\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return null;\n    }\n  }, {\n    key: 'component',\n    value: function component() {\n      return null;\n    }\n  }]);\n\n  return NoCaptcha;\n}(BaseCaptcha);\n\nvar QACaptcha = exports.QACaptcha = function (_BaseCaptcha2) {\n  _inherits(QACaptcha, _BaseCaptcha2);\n\n  function QACaptcha() {\n    _classCallCheck(this, QACaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(QACaptcha).apply(this, arguments));\n  }\n\n  _createClass(QACaptcha, [{\n    key: 'load',\n    value: function load() {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        self._ajax.get(self._context.get('CAPTCHA_API_URL')).then(function (data) {\n          self.question = data.question;\n          self.helpText = data.help_text;\n          resolve();\n        }, function () {\n          self._snackbar.error(gettext(\"Failed to load CAPTCHA.\"));\n          reject();\n        });\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return [];\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return _react2.default.createElement(\n        _formGroup2.default,\n        { label: this.question, 'for': 'id_captcha',\n          labelClass: kwargs.labelClass || \"col-sm-4\",\n          controlClass: kwargs.controlClass || \"col-sm-8\",\n          validation: kwargs.form.state.errors.captcha,\n          helpText: this.helpText || null },\n        _react2.default.createElement('input', { type: 'text', id: 'id_captcha', className: 'form-control',\n          'aria-describedby': 'id_captcha_status',\n          disabled: kwargs.form.state.isLoading,\n          onChange: kwargs.form.bindInput('captcha'),\n          value: kwargs.form.state.captcha })\n      );\n    }\n    /* jshint ignore:end */\n\n  }]);\n\n  return QACaptcha;\n}(BaseCaptcha);\n\nvar ReCaptchaComponent = exports.ReCaptchaComponent = function (_React$Component) {\n  _inherits(ReCaptchaComponent, _React$Component);\n\n  function ReCaptchaComponent() {\n    _classCallCheck(this, ReCaptchaComponent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptchaComponent).apply(this, arguments));\n  }\n\n  _createClass(ReCaptchaComponent, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this4 = this;\n\n      grecaptcha.render('recaptcha', {\n        'sitekey': this.props.siteKey,\n        'callback': function callback(response) {\n          // fire fakey event to binding\n          _this4.props.binding({\n            target: {\n              value: response\n            }\n          });\n        }\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement('div', { id: 'recaptcha' });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ReCaptchaComponent;\n}(_react2.default.Component);\n\nvar ReCaptcha = exports.ReCaptcha = function (_BaseCaptcha3) {\n  _inherits(ReCaptcha, _BaseCaptcha3);\n\n  function ReCaptcha() {\n    _classCallCheck(this, ReCaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptcha).apply(this, arguments));\n  }\n\n  _createClass(ReCaptcha, [{\n    key: 'load',\n    value: function load() {\n      this._include.include('https://www.google.com/recaptcha/api.js', true);\n\n      return new Promise(function (resolve) {\n        var wait = function wait() {\n          if (typeof grecaptcha === \"undefined\") {\n            window.setTimeout(function () {\n              wait();\n            }, 200);\n          } else {\n            resolve();\n          }\n        };\n        wait();\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return [];\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return _react2.default.createElement(\n        _formGroup2.default,\n        { label: gettext(\"Captcha\"), 'for': 'id_captcha',\n          labelClass: kwargs.labelClass || \"col-sm-4\",\n          controlClass: kwargs.controlClass || \"col-sm-8\",\n          validation: kwargs.form.state.errors.captcha,\n          helpText: gettext(\"Please solve the quick test.\") },\n        _react2.default.createElement(ReCaptchaComponent, { siteKey: this._context.get('SETTINGS').recaptcha_site_key,\n          binding: kwargs.form.bindInput('captcha') })\n      );\n    }\n    /* jshint ignore:end */\n\n  }]);\n\n  return ReCaptcha;\n}(BaseCaptcha);\n\nvar Captcha = exports.Captcha = function () {\n  function Captcha() {\n    _classCallCheck(this, Captcha);\n  }\n\n  _createClass(Captcha, [{\n    key: 'init',\n    value: function init(context, ajax, include, snackbar) {\n      switch (context.get('SETTINGS').captcha_type) {\n        case 'no':\n          this._captcha = new NoCaptcha();\n          break;\n\n        case 'qa':\n          this._captcha = new QACaptcha();\n          break;\n\n        case 're':\n          this._captcha = new ReCaptcha();\n          break;\n      }\n\n      this._captcha.init(context, ajax, include, snackbar);\n    }\n\n    // accessors for underlying strategy\n\n  }, {\n    key: 'load',\n    value: function load() {\n      return this._captcha.load();\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return this._captcha.validator();\n    }\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return this._captcha.component(kwargs);\n    }\n  }]);\n\n  return Captcha;\n}();\n\nexports.default = new Captcha();\n\n},{\"../components/form-group\":57,\"react\":\"react\"}],94:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Include = exports.Include = function () {\n  function Include() {\n    _classCallCheck(this, Include);\n  }\n\n  _createClass(Include, [{\n    key: 'init',\n    value: function init(staticUrl) {\n      this._staticUrl = staticUrl;\n      this._included = [];\n    }\n  }, {\n    key: 'include',\n    value: function include(script) {\n      var remote = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n      if (this._included.indexOf(script) === -1) {\n        this._included.push(script);\n        this._include(script, remote);\n      }\n    }\n  }, {\n    key: '_include',\n    value: function _include(script, remote) {\n      $.ajax({\n        url: (!remote ? this._staticUrl : '') + script,\n        cache: true,\n        dataType: 'script'\n      });\n    }\n  }]);\n\n  return Include;\n}();\n\nexports.default = new Include();\n\n},{}],95:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar storage = window.localStorage;\n\nvar LocalStorage = exports.LocalStorage = function () {\n  function LocalStorage() {\n    _classCallCheck(this, LocalStorage);\n  }\n\n  _createClass(LocalStorage, [{\n    key: 'init',\n    value: function init(prefix) {\n      var _this = this;\n\n      this._prefix = prefix;\n      this._watchers = [];\n\n      window.addEventListener('storage', function (e) {\n        var newValueJson = JSON.parse(e.newValue);\n        _this._watchers.forEach(function (watcher) {\n          if (watcher.key === e.key && e.oldValue !== e.newValue) {\n            watcher.callback(newValueJson);\n          }\n        });\n      });\n    }\n  }, {\n    key: 'set',\n    value: function set(key, value) {\n      storage.setItem(this._prefix + key, JSON.stringify(value));\n    }\n  }, {\n    key: 'get',\n    value: function get(key) {\n      var itemString = storage.getItem(this._prefix + key);\n      if (itemString) {\n        return JSON.parse(itemString);\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: 'watch',\n    value: function watch(key, callback) {\n      this._watchers.push({\n        key: this._prefix + key,\n        callback: callback\n      });\n    }\n  }]);\n\n  return LocalStorage;\n}();\n\nexports.default = new LocalStorage();\n\n},{}],96:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.MobileNavbarDropdown = undefined;\n\nvar _mountComponent = require('../utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MobileNavbarDropdown = exports.MobileNavbarDropdown = function () {\n  function MobileNavbarDropdown() {\n    _classCallCheck(this, MobileNavbarDropdown);\n  }\n\n  _createClass(MobileNavbarDropdown, [{\n    key: 'init',\n    value: function init(element) {\n      this._element = element;\n      this._component = null;\n    }\n  }, {\n    key: 'show',\n    value: function show(component) {\n      if (this._component === component) {\n        this.hide();\n      } else {\n        this._component = component;\n        (0, _mountComponent2.default)(component, this._element.id);\n        $(this._element).addClass('open');\n      }\n    }\n  }, {\n    key: 'showConnected',\n    value: function showConnected(name, component) {\n      if (this._component === name) {\n        this.hide();\n      } else {\n        this._component = name;\n        (0, _mountComponent2.default)(component, this._element.id, true);\n        $(this._element).addClass('open');\n      }\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      $(this._element).removeClass('open');\n      this._component = null;\n    }\n  }]);\n\n  return MobileNavbarDropdown;\n}();\n\nexports.default = new MobileNavbarDropdown();\n\n},{\"../utils/mount-component\":105}],97:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Modal = undefined;\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _mountComponent = require('../utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Modal = exports.Modal = function () {\n  function Modal() {\n    _classCallCheck(this, Modal);\n  }\n\n  _createClass(Modal, [{\n    key: 'init',\n    value: function init(element) {\n      var _this = this;\n\n      this._element = element;\n\n      this._modal = $(element).modal({ show: false });\n\n      this._modal.on('hidden.bs.modal', function () {\n        _reactDom2.default.unmountComponentAtNode(_this._element);\n      });\n    }\n  }, {\n    key: 'show',\n    value: function show(component) {\n      (0, _mountComponent2.default)(component, this._element.id);\n      this._modal.modal('show');\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      this._modal.modal('hide');\n    }\n  }]);\n\n  return Modal;\n}();\n\nexports.default = new Modal();\n\n},{\"../utils/mount-component\":105,\"react-dom\":\"react-dom\"}],98:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PageTitle = exports.PageTitle = function () {\n  function PageTitle() {\n    _classCallCheck(this, PageTitle);\n  }\n\n  _createClass(PageTitle, [{\n    key: 'init',\n    value: function init(forumName) {\n      this._forumName = forumName;\n    }\n  }, {\n    key: 'set',\n    value: function set(title) {\n      if (typeof title === 'string') {\n        title = { title: title };\n      }\n\n      var finalTitle = title.title;\n\n      if (title.page) {\n        var pageLabel = interpolate(gettext('page %(page)s'), {\n          page: title.page\n        }, true);\n\n        finalTitle += ' (' + pageLabel + ')';\n      }\n\n      if (title.parent) {\n        finalTitle += ' | ' + title.parent;\n      }\n\n      document.title = finalTitle + ' | ' + this._forumName;\n    }\n  }]);\n\n  return PageTitle;\n}();\n\nexports.default = new PageTitle();\n\n},{}],99:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Snackbar = undefined;\n\nvar _snackbar = require('../reducers/snackbar');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar HIDE_ANIMATION_LENGTH = 300;\nvar MESSAGE_SHOW_LENGTH = 5000;\n\nvar Snackbar = exports.Snackbar = function () {\n  function Snackbar() {\n    _classCallCheck(this, Snackbar);\n  }\n\n  _createClass(Snackbar, [{\n    key: 'init',\n    value: function init(store) {\n      this._store = store;\n      this._timeout = null;\n    }\n  }, {\n    key: 'alert',\n    value: function alert(message, type) {\n      var _this = this;\n\n      if (this._timeout) {\n        window.clearTimeout(this._timeout);\n        this._store.dispatch((0, _snackbar.hideSnackbar)());\n\n        this._timeout = window.setTimeout(function () {\n          _this._timeout = null;\n          _this.alert(message, type);\n        }, HIDE_ANIMATION_LENGTH);\n      } else {\n        this._store.dispatch((0, _snackbar.showSnackbar)(message, type));\n        this._timeout = window.setTimeout(function () {\n          _this._store.dispatch((0, _snackbar.hideSnackbar)());\n          _this._timeout = null;\n        }, MESSAGE_SHOW_LENGTH);\n      }\n    }\n\n    // shorthands for message types\n\n  }, {\n    key: 'info',\n    value: function info(message) {\n      this.alert(message, 'info');\n    }\n  }, {\n    key: 'success',\n    value: function success(message) {\n      this.alert(message, 'success');\n    }\n  }, {\n    key: 'warning',\n    value: function warning(message) {\n      this.alert(message, 'warning');\n    }\n  }, {\n    key: 'error',\n    value: function error(message) {\n      this.alert(message, 'error');\n    }\n\n    // shorthand for api errors\n\n  }, {\n    key: 'apiError',\n    value: function apiError(rejection) {\n      var message = gettext(\"Unknown error has occured.\");\n\n      if (rejection.status === 0) {\n        message = rejection.detail;\n      }\n\n      if (rejection.status === 400 && rejection.detail) {\n        message = rejection.detail;\n      }\n\n      if (rejection.status === 403) {\n        message = rejection.detail;\n        if (message === \"Permission denied\") {\n          message = gettext(\"You don't have permission to perform this action.\");\n        }\n      }\n\n      if (rejection.status === 404) {\n        message = gettext(\"Action link is invalid.\");\n      }\n\n      this.error(message);\n    }\n  }]);\n\n  return Snackbar;\n}();\n\nexports.default = new Snackbar();\n\n},{\"../reducers/snackbar\":87}],100:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.StoreWrapper = undefined;\n\nvar _redux = require('redux');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar StoreWrapper = exports.StoreWrapper = function () {\n  function StoreWrapper() {\n    _classCallCheck(this, StoreWrapper);\n\n    this._store = null;\n    this._reducers = {};\n    this._initialState = {};\n  }\n\n  _createClass(StoreWrapper, [{\n    key: 'addReducer',\n    value: function addReducer(name, reducer, initialState) {\n      this._reducers[name] = reducer;\n      this._initialState[name] = initialState;\n    }\n  }, {\n    key: 'init',\n    value: function init() {\n      this._store = (0, _redux.createStore)((0, _redux.combineReducers)(this._reducers), this._initialState);\n    }\n  }, {\n    key: 'getStore',\n    value: function getStore() {\n      return this._store;\n    }\n\n    // Store API\n\n  }, {\n    key: 'getState',\n    value: function getState() {\n      return this._store.getState();\n    }\n  }, {\n    key: 'dispatch',\n    value: function dispatch(action) {\n      return this._store.dispatch(action);\n    }\n  }]);\n\n  return StoreWrapper;\n}();\n\nexports.default = new StoreWrapper();\n\n},{\"redux\":\"redux\"}],101:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* global zxcvbn */\n\nvar Zxcvbn = exports.Zxcvbn = function () {\n  function Zxcvbn() {\n    _classCallCheck(this, Zxcvbn);\n  }\n\n  _createClass(Zxcvbn, [{\n    key: \"init\",\n    value: function init(include) {\n      this._include = include;\n    }\n  }, {\n    key: \"scorePassword\",\n    value: function scorePassword(password, inputs) {\n      // 0-4 score, the more the stronger password\n      return zxcvbn(password, inputs).score;\n    }\n  }, {\n    key: \"load\",\n    value: function load() {\n      if (typeof zxcvbn === \"undefined\") {\n        this._include.include('misago/js/zxcvbn.js');\n        return this._loadingPromise();\n      } else {\n        return this._loadedPromise();\n      }\n    }\n  }, {\n    key: \"_loadingPromise\",\n    value: function _loadingPromise() {\n      return new Promise(function (resolve) {\n        var wait = function wait() {\n          if (typeof zxcvbn === \"undefined\") {\n            window.setTimeout(function () {\n              wait();\n            }, 200);\n          } else {\n            resolve();\n          }\n        };\n        wait();\n      });\n    }\n  }, {\n    key: \"_loadedPromise\",\n    value: function _loadedPromise() {\n      // we have already loaded zxcvbn.js, resolve away!\n      return new Promise(function (resolve) {\n        resolve();\n      });\n    }\n  }]);\n\n  return Zxcvbn;\n}();\n\nexports.default = new Zxcvbn();\n\n},{}],102:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (ban, changeState) {\n  _reactDom2.default.render(\n  /* jshint ignore:start */\n  _react2.default.createElement(\n    _reactRedux.Provider,\n    { store: _store2.default.getStore() },\n    _react2.default.createElement(RedrawedBannedPage, { message: ban.message,\n      expires: ban.expires_on ? (0, _moment2.default)(ban.expires_on) : null })\n  ),\n  /* jshint ignore:end */\n  document.getElementById('page-mount'));\n\n  if (typeof changeState === 'undefined' || changeState) {\n    var forumName = _index2.default.get('SETTINGS').forum_name;\n    document.title = gettext(\"You are banned\") + ' | ' + forumName;\n    window.history.pushState({}, \"\", _index2.default.get('BANNED_URL'));\n  }\n};\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _bannedPage = require('../components/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// jshint ignore:line\n\n/* jshint ignore:start */\n// jshint ignore:line\n// jshint ignore:line\nvar select = function select(state) {\n  return state.tick;\n}; // jshint ignore:line\n// jshint ignore:line\n\nvar RedrawedBannedPage = (0, _reactRedux.connect)(select)(_bannedPage2.default);\n/* jshint ignore:end */\n\n},{\"../components/banned-page\":50,\"../index\":85,\"../services/store\":100,\"moment\":\"moment\",\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\"}],103:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (list, rowWidth) {\n  var padding = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n  var rows = [];\n  var row = [];\n\n  list.forEach(function (element) {\n    row.push(element);\n    if (row.length === rowWidth) {\n      rows.push(row);\n      row = [];\n    }\n  });\n\n  // pad row to required length?\n  if (padding !== false && row.length > 0 && row.length < rowWidth) {\n    for (var i = row.length; i < rowWidth; i++) {\n      row.push(padding);\n    }\n  }\n\n  if (row.length) {\n    rows.push(row);\n  }\n\n  return rows;\n};\n\n},{}],104:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (bytes) {\n  if (bytes > 1000 * 1000 * 1000) {\n    return Math.round(bytes * 100 / (1000 * 1000 * 1000)) / 100 + ' GB';\n  } else if (bytes > 1000 * 1000) {\n    return Math.round(bytes * 100 / (1000 * 1000)) / 100 + ' MB';\n  } else if (bytes > 1000) {\n    return Math.round(bytes * 100 / 1000) / 100 + ' KB';\n  } else {\n    return Math.round(bytes * 100) / 100 + ' B';\n  }\n};\n\n},{}],105:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (Component, rootElementId) {\n  var connected = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];\n\n  var rootElement = document.getElementById(rootElementId);\n\n  if (rootElement) {\n    if (connected) {\n      _reactDom2.default.render(\n      /* jshint ignore:start */\n      _react2.default.createElement(\n        _reactRedux.Provider,\n        { store: _store2.default.getStore() },\n        _react2.default.createElement(Component, null)\n      ),\n      /* jshint ignore:end */\n      rootElement);\n    } else {\n      _reactDom2.default.render(\n      /* jshint ignore:start */\n      _react2.default.createElement(Component, null),\n      /* jshint ignore:end */\n      rootElement);\n    }\n  }\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n},{\"../services/store\":100,\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\"}],106:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OrderedList = function () {\n  function OrderedList(items) {\n    _classCallCheck(this, OrderedList);\n\n    this.isOrdered = false;\n    this._items = items || [];\n  }\n\n  _createClass(OrderedList, [{\n    key: \"add\",\n    value: function add(key, item, order) {\n      this._items.push({\n        key: key,\n        item: item,\n\n        after: order ? order.after || null : null,\n        before: order ? order.before || null : null\n      });\n    }\n  }, {\n    key: \"get\",\n    value: function get(key, value) {\n      for (var i = 0; i < this._items.length; i++) {\n        if (this._items[i].key === key) {\n          return this._items[i].item;\n        }\n      }\n\n      return value;\n    }\n  }, {\n    key: \"has\",\n    value: function has(key) {\n      return this.get(key) !== undefined;\n    }\n  }, {\n    key: \"values\",\n    value: function values() {\n      var values = [];\n      for (var i = 0; i < this._items.length; i++) {\n        values.push(this._items[i].item);\n      }\n      return values;\n    }\n  }, {\n    key: \"order\",\n    value: function order(values_only) {\n      if (!this.isOrdered) {\n        this._items = this._order(this._items);\n        this.isOrdered = true;\n      }\n\n      if (values_only || typeof values_only === 'undefined') {\n        return this.values();\n      } else {\n        return this._items;\n      }\n    }\n  }, {\n    key: \"orderedValues\",\n    value: function orderedValues() {\n      return this.order(true);\n    }\n  }, {\n    key: \"_order\",\n    value: function _order(unordered) {\n      // Index of unordered items\n      var index = [];\n      unordered.forEach(function (item) {\n        index.push(item.key);\n      });\n\n      // Ordered items\n      var ordered = [];\n      var ordering = [];\n\n      // First pass: register items that\n      // don't specify their order\n      unordered.forEach(function (item) {\n        if (!item.after && !item.before) {\n          ordered.push(item);\n          ordering.push(item.key);\n        }\n      });\n\n      // Second pass: register items that\n      // specify their before to \"_end\"\n      unordered.forEach(function (item) {\n        if (item.before === \"_end\") {\n          ordered.push(item);\n          ordering.push(item.key);\n        }\n      });\n\n      // Third pass: keep iterating items\n      // until we hit iterations limit or finish\n      // ordering list\n      function insertItem(item) {\n        var insertAt = -1;\n        if (ordering.indexOf(item.key) === -1) {\n          if (item.after) {\n            insertAt = ordering.indexOf(item.after);\n            if (insertAt !== -1) {\n              insertAt += 1;\n            }\n          } else if (item.before) {\n            insertAt = ordering.indexOf(item.before);\n          }\n\n          if (insertAt !== -1) {\n            ordered.splice(insertAt, 0, item);\n            ordering.splice(insertAt, 0, item.key);\n          }\n        }\n      }\n\n      var iterations = 200;\n      while (iterations > 0 && index.length !== ordering.length) {\n        iterations -= 1;\n        unordered.forEach(insertItem);\n      }\n\n      return ordered;\n    }\n  }]);\n\n  return OrderedList;\n}();\n\nexports.default = OrderedList;\n\n},{}],107:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.int = int;\nexports.range = range;\nfunction int(min, max) {\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nfunction range(min, max) {\n  var array = new Array(int(min, max));\n  for (var i = 0; i < array.length; i++) {\n    array[i] = i;\n  }\n\n  return array;\n}\n\n},{}],108:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (options) {\n  var routes = {\n    component: options.component,\n    childRoutes: [{\n      path: options.root,\n      onEnter: function onEnter(nextState, replaceState) {\n        replaceState(null, options.paths[0].path);\n      }\n    }].concat(options.paths.map(function (path) {\n      return path;\n    }))\n  };\n\n  _reactDom2.default.render(_react2.default.createElement(\n    _reactRedux.Provider,\n    { store: _store2.default.getStore() },\n    _react2.default.createElement(_reactRouter.Router, { routes: routes, history: history })\n  ), rootElement);\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _reactRouter = require('react-router');\n\nvar _createBrowserHistory = require('history/lib/createBrowserHistory');\n\nvar _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// jshint ignore:start\n\nvar rootElement = document.getElementById('page-mount');\nvar history = new _createBrowserHistory2.default();\n\n},{\"../services/store\":100,\"history/lib/createBrowserHistory\":38,\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\",\"react-router\":\"react-router\"}],109:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.required = required;\nexports.email = email;\nexports.minLength = minLength;\nexports.maxLength = maxLength;\nexports.usernameMinLength = usernameMinLength;\nexports.usernameMaxLength = usernameMaxLength;\nexports.usernameContent = usernameContent;\nexports.passwordMinLength = passwordMinLength;\nvar EMAIL = /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\nvar USERNAME = new RegExp('^[0-9a-z]+$', 'i');\n\nfunction required() {\n  return function (value) {\n    if ($.trim(value).length === 0) {\n      return gettext(\"This field is required.\");\n    }\n  };\n}\n\nfunction email(message) {\n  return function (value) {\n    if (!EMAIL.test(value)) {\n      return message || gettext(\"Enter a valid email address.\");\n    }\n  };\n}\n\nfunction minLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = '';\n    var length = $.trim(value).length;\n\n    if (length < limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length);\n      } else {\n        returnMessage = ngettext(\"Ensure this value has at least %(limit_value)s character (it has %(show_value)s).\", \"Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).\", limitValue);\n      }\n      return interpolate(returnMessage, {\n        limit_value: limitValue,\n        show_value: length\n      }, true);\n    }\n  };\n}\n\nfunction maxLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = '';\n    var length = $.trim(value).length;\n\n    if (length > limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length);\n      } else {\n        returnMessage = ngettext(\"Ensure this value has at most %(limit_value)s character (it has %(show_value)s).\", \"Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).\", limitValue);\n      }\n      return interpolate(returnMessage, {\n        limit_value: limitValue,\n        show_value: length\n      }, true);\n    }\n  };\n}\n\nfunction usernameMinLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Username must be at least %(limit_value)s character long.\", \"Username must be at least %(limit_value)s characters long.\", limitValue);\n  };\n  return this.minLength(settings.username_length_min, message);\n}\n\nfunction usernameMaxLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Username cannot be longer than %(limit_value)s character.\", \"Username cannot be longer than %(limit_value)s characters.\", limitValue);\n  };\n  return this.maxLength(settings.username_length_max, message);\n}\n\nfunction usernameContent() {\n  return function (value) {\n    if (!USERNAME.test($.trim(value))) {\n      return gettext(\"Username can only contain latin alphabet letters and digits.\");\n    }\n  };\n}\n\nfunction passwordMinLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Valid password must be at least %(limit_value)s character long.\", \"Valid password must be at least %(limit_value)s characters long.\", limitValue);\n  };\n  return this.minLength(settings.password_length_min, message);\n}\n\n},{}]},{},[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]);\n"],"sourceRoot":"/source/"}

File diff suppressed because it is too large
+ 0 - 39021
misago/static/misago/js/vendor.js


+ 2 - 2
misago/templates/misago/base.html

@@ -5,8 +5,8 @@
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1">
-    <title>{% block title %}{{ misago_settings.forum_name }}{% endblock %}</title>
-    <meta name="description" content="{% block meta-description %}{% endblock %}">
+    <title>{% spaceless %}{% block title %}{{ misago_settings.forum_name }}{% endblock %}{% endspaceless %}</title>
+    <meta name="description" content="{% spaceless %}{% block meta-description %}{% endblock %}{% endspaceless %}">
     <base href="{% url 'misago:index' %}">
     <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
     <!--[if lt IE 9]>

+ 17 - 0
misago/templates/misago/userslists/active_posters.html

@@ -1,6 +1,23 @@
 {% extends "misago/userslists/base.html" %}
 {% load humanize i18n misago_avatars %}
 
+
+{% block title %}{% trans "Active posters" %} | {{ block.super }}{% endblock %}
+{% block meta-description %}
+  {% if users_count %}
+    {% blocktrans trimmed with posters=users_count|intcomma days=tracked_period count counter=users_count %}
+      {{ posters }} most active poster from last {{ days }} days.
+    {% plural %}
+      {{ posters }} most active posters from last {{ days }} days.
+    {% endblocktrans %}
+  {% else %}
+    {% blocktrans trimmed with days=tracked_period %}
+      No users have posted any new messages during last {{ days }} days.
+    {% endblocktrans %}
+  {% endif %}
+{% endblock %}
+
+
 {% block content %}
 {{ block.super }}
 

+ 4 - 0
misago/templates/misago/userslists/base.html

@@ -1,6 +1,10 @@
 {% extends "misago/base.html" %}
 {% load i18n %}
 
+
+{% block title %}{% trans "Users" %} | {{ block.super }}{% endblock %}
+
+
 {% block content %}
 <div class="page page-users-lists">
 

+ 10 - 32
misago/users/api/userendpoints/list.py

@@ -11,42 +11,20 @@ from misago.core.cache import cache
 from misago.core.shortcuts import get_object_or_404
 from misago.forums.models import Forum
 
+from misago.users.views.lists import get_active_posters_rankig
 from misago.users.models import Rank
+from misago.users.online.utils import make_users_status_aware
 from misago.users.serializers import ScoredUserSerializer
 
 
-def active(request, queryset):
-    cache_key = 'misago_active_posters_ranking'
-    ranking = cache.get(cache_key, False)
-    if ranking is False:
-        ranking = real_active()
-        cache.set(cache_key, ranking, 18*3600)
-    return ranking
+def active(request):
+    ranking = get_active_posters_rankig()
+    make_users_status_aware(ranking['users'], request.user.acl)
 
-
-def real_active():
-    tracked_period = settings.MISAGO_RANKING_LENGTH
-    tracked_since = timezone.now() - timedelta(days=tracked_period)
-
-    ranked_forums = [forum.pk for forum in Forum.objects.all_forums()]
-
-    User = get_user_model()
-    queryset = User.objects.filter(posts__gt=0)
-    queryset = queryset.filter(post__posted_on__gte=tracked_since,
-                               post__forum__in=ranked_forums)
-    queryset = queryset.annotate(score=Count('post'))
-    queryset = queryset.select_related('user__rank')
-    queryset = queryset.order_by('-score', 'slug')
-
-    users_ranking = []
-    for result in queryset[:settings.MISAGO_RANKING_SIZE]:
-        result.score = result.num_posts
-        users_ranking.append(result)
     return {
-        'results': ScoredUserSerializer(users_ranking, many=True).data,
-        'meta': {
-            'ranking_length': settings.MISAGO_RANKING_LENGTH
-        }
+        'tracked_period': settings.MISAGO_RANKING_LENGTH,
+        'results': ScoredUserSerializer(ranking['users'], many=True).data,
+        'count': ranking['users_count']
     }
 
 
@@ -67,11 +45,11 @@ LISTS = {
 }
 
 
-def list_endpoint(request, queryset):
+def list_endpoint(request):
     list_type = request.query_params.get('list')
     list_handler = LISTS.get(list_type)
 
     if list_handler:
-        return list_handler(request, queryset)
+        return list_handler(request)
     else:
         return

+ 1 - 25
misago/users/api/users.py

@@ -72,31 +72,7 @@ class UserViewSet(viewsets.GenericViewSet):
             'users': self.get_users_count(),
         }
 
-        list_dict = list_endpoint(request, self.get_queryset())
-        if not list_dict:
-            return Response([])
-
-        if list_dict.get('meta'):
-            response_dict.update(list_dict['meta'])
-
-        if list_dict.get('results'):
-            response_dict['results'] = list_dict['results']
-        elif list_dict.get('queryset'):
-            queryset = list_dict['queryset']
-            if list_dict.get('paginate'):
-                queryset = self.paginate_queryset(list_dict['queryset'])
-                response_dict.update(self.paginator.get_meta())
-
-            if list_dict.get('serializer'):
-                SerializerClass = list_dict.get('serializer')
-            else:
-                SerializerClass = self.serializer_class
-
-            serializer = SerializerClass(
-                queryset, many=True, context={'user': request.user})
-            response_dict['results'] = serializer.data
-
-        return Response(response_dict)
+        return Response(list_endpoint(request))
 
     def create(self, request):
         return create_endpoint(request)

+ 20 - 2
misago/users/online/utils.py

@@ -3,10 +3,10 @@ from datetime import timedelta
 from django.utils import timezone
 
 from misago.users.bans import get_user_ban
-from misago.users.models import Online
+from misago.users.models import Online, BanCache
 
 
-ACTIVITY_CUTOFF = timedelta(minutes=15)
+ACTIVITY_CUTOFF = timedelta(minutes=1)
 
 
 def get_user_status(user, acl):
@@ -51,3 +51,21 @@ def get_user_status(user, acl):
             user_status['is_offline'] = True
 
     return user_status
+
+
+def make_users_status_aware(users, acl):
+    users_dict = {}
+    for user in users:
+        users_dict[user.pk] = user
+
+    # Fill ban cache on users
+    for ban_cache in BanCache.objects.filter(user__in=users_dict.keys()):
+        user.ban_cache = ban_cache
+
+    # Fill user online trackers
+    for online_tracker in Online.objects.filter(user__in=users_dict.keys()):
+        user.online_tracker = online_tracker
+
+    # Fill user states
+    for user in users:
+        user.status = get_user_status(user, acl)

+ 17 - 4
misago/users/serializers/user.py

@@ -19,6 +19,18 @@ __all__ = [
 ]
 
 
+class StatusSerializer(serializers.Serializer):
+    is_offline = serializers.BooleanField()
+    is_online = serializers.BooleanField()
+    is_hidden = serializers.BooleanField()
+    is_offline_hidden = serializers.BooleanField()
+    is_online_hidden = serializers.BooleanField()
+    last_click = serializers.DateTimeField()
+
+    is_banned = serializers.BooleanField()
+    banned_until = serializers.DateTimeField()
+
+
 class AuthenticatedUserSerializer(serializers.ModelSerializer):
     acl = serializers.SerializerMethodField()
     rank = RankSerializer(many=False, read_only=True)
@@ -121,10 +133,10 @@ class UserSerializer(BaseSerializer):
         )
 
     def get_status(self, obj):
-        if 'user' in self.context:
-            return get_user_status(obj, self.context['user'].acl)
-        else:
-            return {}
+        try:
+            return StatusSerializer(obj.status).data
+        except AttributeError:
+            return None
 
     def get_signature(self, obj):
         if obj.has_valid_signature:
@@ -149,6 +161,7 @@ class ScoredUserSerializer(UserSerializer):
             'threads',
             'posts',
             'meta',
+            'status',
             'absolute_url',
         )
 

Some files were not shown because too many files changed in this diff