angular.module('plunker', ['ngMaterial', 'ngTouch', 'ngAnimate']).controller('AppCtrl', function ($scope, $timeout, $mdSidenav) {
  $scope.toggleLeft  = function () {
    $mdSidenav('left').toggle();
  };
  $scope.toggleRight = function () {
    $mdSidenav('right').toggle();
  };
  $scope.openLeft  = function () {
    $mdSidenav('left').open();
  };
  $scope.closeLeft = function () {
    $mdSidenav('left').close();
  };
  $scope.user        = {
    title     : "",
    email     : "",
    firstName : "",
    lastName  : "",
    company   : "",
    address   : "",
    city      : "",
    state     : "",
    country   : "",
    postalCode: ""
  };
}).controller('LeftCtrl', function ($scope, $timeout, $mdSidenav) {
  $scope.close = function () {
    $mdSidenav('left').close();
  };
}).controller('RightCtrl', function ($scope, $timeout, $mdSidenav) {
  $scope.close = function () {
    $mdSidenav('right').close();
  };
});
<!DOCTYPE html>
<html ng-app="plunker">
  <head>
    <meta charset="utf-8"/>
    <title>AngularJS material-sidenav Plunker</title>
    <script>
      document.write('<base href="' + document.location + '"/>');
    </script>
    <meta content="width=device-width, initial-scale=1" name="viewport">
    <link href="angular-material.min.css" rel="stylesheet"/>
    <link href="deep-orange-theme.css" rel="stylesheet"/>
    <link href="red-theme.css" rel="stylesheet"/>
    <link href="style.css" rel="stylesheet"/>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular-touch.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular-route.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular-aria.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular-animate.min.js"></script>
   <!-- <script src="//cdnjs.cloudflare.com/ajax/libs/hammer.js/1.1.3/hammer.min.js"></script> -->
    <script src="docs.js"></script>
    <script src="app.js"></script>
  </head>
  <body>
    <div layout-fill layout="vertical" ng-controller="AppCtrl" ng-swipe-right="openLeft()" ng-swipe-left="closeLeft()">
      <section flex layout="horizontal">
        <md-sidenav class="md-sidenav-left md-whiteframe-z2" component-id="left" is-locked-open="$media('md')"  md-theme="deep-orange">
          <md-toolbar>
            <h1 class="md-toolbar-tools">Sidenav Left</h1>
          </md-toolbar>
          <md-content class="md-padding" ng-controller="LeftCtrl">
            <md-button class="md-primary" hide-md ng-click="close()">
              Close Sidenav Left
            </md-button>
            <p hide show-md>
              This sidenav is locked open on your device. To go back to the default
              behavior, narrow your display.
            </p>
          </md-content>
      <md-checkbox> 
      checkbox
    </md-checkbox>
    <md-button class="md-primary md-fab md-fab-bottom-right">
      FAB
    </md-button>
        </md-sidenav>
        <md-content class="md-padding" flex>
          <div layout-align="center center" layout-fill layout="vertical">
            <p>
              The left sidenav will 'lock open' on a medium (>=960px wide) device.
            </p>
            <div>
              <md-button class="md-primary" hide-md ng-click="toggleLeft()">
                Toggle left
              </md-button>
            </div>
            <div>
              <md-button class="md-primary" ng-click="toggleRight()">
                Toggle right
              </md-button>
            </div>
            <div layout="vertical">
              <md-content>
                <form style="padding: 20px;">
                  <div class="row">
                    <md-text-float label="Title" ng-model="user.title"></md-text-float>
                    <md-text-float label="eMail" ng-model="user.email" type="email"></md-text-float>
                  </div>
                </form>
              </md-content>
              <md-content>
                <form style="padding: 20px;">
                  <md-text-float label="Company" ng-model="user.company"></md-text-float>
                  <div class="row">
                    <md-text-float label="FirstName" ng-model="user.firstName"></md-text-float>
                    <md-text-float class="long" label="LastName" ng-model="user.lastName"></md-text-float>
                  </div>
                  <md-text-float label="Address" ng-model="user.address"></md-text-float>
                  <div class="row">
                    <md-text-float label="City" ng-model="user.city"></md-text-float>
                    <md-text-float label="State" ng-model="user.state"></md-text-float>
                    <md-text-float label="Postal Code" ng-model="user.postalCode"></md-text-float>
                  </div>
                  <md-text-float label="Country" ng-model="user.country"></md-text-float>
                </form>
              </md-content>
            </div>
          </div>
        </md-content>
        <md-sidenav class="md-sidenav-right md-whiteframe-z2" component-id="right"  md-theme="red">
          <md-toolbar class="md-theme-light">
            <h1 class="md-toolbar-tools">Sidenav Right</h1>
          </md-toolbar>
          <md-content class="md-padding" ng-controller="RightCtrl">
            <md-button class="md-primary" ng-click="close()">
              Close Sidenav Right
            </md-button>
          </md-content>
        </md-sidenav>
      </section>
    </div>
  </body>
</html>

 .textFielddemoBasicUsage {
  /**
 *  SaSS version
 *
 * form > .row {
 *   @include flex-display();
 *   @include flex-align-items(center);
 *   @include flex-direction(row);
 *
 *   > * {
 *     font-size: inherit;
 *     margin: 0 8px;
 *   }
 *
 *   margin-left: -8px;
 * }
 *
 *
 * md-input-group.long {
 *   input {
 *      width : 262px;
 *   }
 * }
 *
*/ }
  .textFielddemoBasicUsage form > .row {
    display: -webkit-box;
    display: -webkit-flex;
    display: -moz-box;
    display: -moz-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-align: center;
    -ms-flex-align: center;
    -webkit-align-items: center;
    -moz-align-items: center;
    align-items: center;
    -webkit-box-direction: normal;
    -webkit-box-orient: horizontal;
    -webkit-flex-direction: row;
    -moz-flex-direction: row;
    -ms-flex-direction: row;
    flex-direction: row;
    margin-left: -8px; }
  .textFielddemoBasicUsage .row > * {
    font-size: inherit;
    margin-left: 8px;
    margin-right: 8px; }
  .textFielddemoBasicUsage md-input-group.long > input {
    width: 264px; }

/*!
 * Angular Material Design
 * https://github.com/angular/material
 * @license MIT
 * v0.5.1
 */
(function() {
angular.module('ngMaterial', ["ng","ngAnimate","ngAria","material.core","material.animations","material.components.backdrop","material.components.bottomSheet","material.components.button","material.components.card","material.components.checkbox","material.components.content","material.components.dialog","material.components.divider","material.components.icon","material.components.list","material.components.progressCircular","material.components.progressLinear","material.components.radioButton","material.components.sidenav","material.components.slider","material.components.sticky","material.components.subheader","material.components.swipe","material.components.switch","material.components.tabs","material.components.textField","material.components.toast","material.components.toolbar","material.components.tooltip","material.components.whiteframe","material.services.aria","material.services.attrBind","material.services.compiler","material.services.interimElement","material.services.media","material.services.registry","material.services.theming"]);})();

(function() {
  /**
 * Initialization function that validates environment
 * requirements.
 */
angular.module('material.core', [] )

.run(function validateEnvironment() {

  if (typeof Hammer === 'undefined') {
    throw new Error(
      'ngMaterial requires HammerJS to be preloaded.'
    );
  }

})
.config(['$provide', function($provide) {
  $provide.decorator('$$rAF', ['$delegate', '$rootScope', rAFDecorator]);

  function rAFDecorator($$rAF, $rootScope) {
    /**
     * Use this to debounce events that come in often.
     * The debounced function will always use the *last* invocation before the
     * coming frame.
     *
     * For example, window resize events that fire many times a second:
     * If we set to use an raf-debounced callback on window resize, then
     * our callback will only be fired once per frame, with the last resize
     * event that happened before that frame.
     *
     * @param {function} callback function to debounce
     */
    $$rAF.debounce = function(cb) {
      var queueArgs, alreadyQueued, queueCb, context;
      return function debounced() {
        queueArgs = arguments;
        context = this;
        queueCb = cb;
        if (!alreadyQueued) {
          alreadyQueued = true;
          $$rAF(function() {
            queueCb.apply(context, queueArgs);
            alreadyQueued = false;
          });
        }
      };
    };

    return $$rAF;
  }

}]);




})();

(function() {
angular.module('material.core')
.constant('$mdConstant', {
  KEY_CODE: {
    ENTER: 13,
    ESCAPE: 27,
    SPACE: 32,
    LEFT_ARROW : 37,
    UP_ARROW : 38,
    RIGHT_ARROW : 39,
    DOWN_ARROW : 40
  }
});
})();

(function() {
/* 
 * This var has to be outside the angular factory, otherwise when
 * there are multiple material apps on the same page, each app
 * will create its own instance of this array and the app's IDs 
 * will not be unique.
 */
var nextUniqueId = ['0','0','0'];

angular.module('material.core')
.factory('$mdUtil', ['$cacheFactory', function($cacheFactory) {
  var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;

  var Util;
  return Util = {
    now: window.performance ? angular.bind(window.performance, window.performance.now) : Date.now,

    /**
     * Checks if the specified element has an ancestor (ancestor being parent, grandparent, etc)
     * with the given attribute defined. 
     *
     * Also pass in an optional `limit` (levels of ancestry to scan), default 4.
     */
    ancestorHasAttribute: function ancestorHasAttribute(element, attrName, limit) {
      limit = limit || 4;
      var current = element;
      while (limit-- && current.length) {
        if (current[0].hasAttribute && current[0].hasAttribute(attrName)) {
          return true;
        }
        current = current.parent();
      }
      return false;
    },

    /**
     * Checks to see if the element or its parents are disabled.
     * @param element DOM element to start scanning for `disabled` attribute
     * @param limit Number of parent levels that should be scanned; defaults to 4
     * @returns {*} Boolean
     */
    isParentDisabled: function isParentDisabled(element, limit) {
      return Util.ancestorHasAttribute(element, 'disabled', limit);
    },

    /**
     * Checks if two elements have the same parent
     */
    elementIsSibling: function elementIsSibling(element, otherElement) {
      return element.parent().length && 
        (element.parent()[0] === otherElement.parent()[0]);
    },

    /**
     * Converts snake_case to camelCase.
     * @param name Name to normalize
     */
    camelCase: function camelCase(name) {
      return name
        .replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
          return offset ? letter.toUpperCase() : letter;
        });
    },

    /**
     * Selects 'n' words from a string
     * for use in an HTML attribute
     */
    stringFromTextBody: function stringFromTextBody(textBody, numWords) {
      var string = textBody.trim();

      if(string.split(/\s+/).length > numWords){
        string = textBody.split(/\s+/).slice(1, (numWords + 1)).join(" ") + '...';
      }
      return string;
    },

    /**
     * Publish the iterator facade to easily support iteration and accessors
     * @see iterator below
     */
    iterator: iterator,

    /**
     * @see cacheFactory below
     */
    cacheFactory: cacheFactory,

    // Returns a function, that, as long as it continues to be invoked, will not
    // be triggered. The function will be called after it stops being called for
    // N milliseconds. If `immediate` is passed, trigger the function on the
    // leading edge, instead of the trailing.
    debounce: function debounce(func, wait, immediate) {
      var timeout;
      return function debounced() {
        var context = this, args = arguments;
        clearTimeout(timeout);
        timeout = setTimeout(function() {
          timeout = null;
          if (!immediate) func.apply(context, args);
        }, wait);
        if (immediate && !timeout) func.apply(context, args);
      };
    },

    // Returns a function that can only be triggered every `delay` milliseconds.
    // In other words, the function will not be called unless it has been more
    // than `delay` milliseconds since the last call.
    throttle: function throttle(func, delay) {
      var recent;
      return function throttled() {
        var context = this;
        var args = arguments;
        var now = Util.now();

        if (!recent || recent - now > delay) {
          func.apply(context, args);
          recent = now;
        }
      };
    },

    /**
     * Wraps an element with a tag
     *
     * @param el element to wrap
     * @param tag tag to wrap it with
     * @param [className] optional class to apply to the wrapper
     * @returns new element
     *
     */
    wrap: function(el, tag, className) {
      if(el.hasOwnProperty(0)) { el = el[0]; }
      var wrapper = document.createElement(tag);
      wrapper.className += className;
      wrapper.appendChild(el.parentNode.replaceChild(wrapper, el));
      return angular.element(wrapper);
    },

    /**
     * nextUid, from angular.js.
     * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric
     * characters such as '012ABC'. The reason why we are not using simply a number counter is that
     * the number string gets longer over time, and it can also overflow, where as the nextId
     * will grow much slower, it is a string, and it will never overflow.
     *
     * @returns an unique alpha-numeric string
     */
    nextUid: function() {
      var index = nextUniqueId.length;
      var digit;

      while(index) {
        index--;
        digit = nextUniqueId[index].charCodeAt(0);
        if (digit == 57 /*'9'*/) {
          nextUniqueId[index] = 'A';
          return nextUniqueId.join('');
        }
        if (digit == 90  /*'Z'*/) {
          nextUniqueId[index] = '0';
        } else {
          nextUniqueId[index] = String.fromCharCode(digit + 1);
          return nextUniqueId.join('');
        }
      }
      nextUniqueId.unshift('0');
      return nextUniqueId.join('');
    },

    // Stop watchers and events from firing on a scope without destroying it,
    // by disconnecting it from its parent and its siblings' linked lists.
    disconnectScope: function disconnectScope(scope) {
      if (!scope) return;

      // we can't destroy the root scope or a scope that has been already destroyed
      if (scope.$root === scope) return;
      if (scope.$$destroyed ) return;

      var parent = scope.$parent;
      scope.$$disconnected = true;

      // See Scope.$destroy
      if (parent.$$childHead === scope) parent.$$childHead = scope.$$nextSibling;
      if (parent.$$childTail === scope) parent.$$childTail = scope.$$prevSibling;
      if (scope.$$prevSibling) scope.$$prevSibling.$$nextSibling = scope.$$nextSibling;
      if (scope.$$nextSibling) scope.$$nextSibling.$$prevSibling = scope.$$prevSibling;

      scope.$$nextSibling = scope.$$prevSibling = null;

    },

    // Undo the effects of disconnectScope above.
    reconnectScope: function reconnectScope(scope) {
      if (!scope) return;

      // we can't disconnect the root node or scope already disconnected
      if (scope.$root === scope) return;
      if (!scope.$$disconnected) return;

      var child = scope;

      var parent = child.$parent;
      child.$$disconnected = false;
      // See Scope.$new for this logic...
      child.$$prevSibling = parent.$$childTail;
      if (parent.$$childHead) {
        parent.$$childTail.$$nextSibling = child;
        parent.$$childTail = child;
      } else {
        parent.$$childHead = parent.$$childTail = child;
      }
    }
  };

  /*
   * iterator is a list facade to easily support iteration and accessors
   *
   * @param items Array list which this iterator will enumerate
   * @param reloop Boolean enables iterator to consider the list as an endless reloop
   */
  function iterator(items, reloop) {
    var trueFn = function() { return true; };

    reloop = !!reloop;
    var _items = items || [ ];

    // Published API
    return {
      items: getItems,
      count: count,

      inRange: inRange,
      contains: contains,
      indexOf: indexOf,
      itemAt: itemAt,

      findBy: findBy,

      add: add,
      remove: remove,

      first: first,
      last: last,
      next: next,
      previous: previous,

      hasPrevious: hasPrevious,
      hasNext: hasNext

    };

    /*
     * Publish copy of the enumerable set
     * @returns {Array|*}
     */
    function getItems() {
      return [].concat(_items);
    }

    /*
     * Determine length of the list
     * @returns {Array.length|*|number}
     */
    function count() {
      return _items.length;
    }

    /*
     * Is the index specified valid
     * @param index
     * @returns {Array.length|*|number|boolean}
     */
    function inRange(index) {
      return _items.length && ( index > -1 ) && (index < _items.length );
    }

    /*
     * Can the iterator proceed to the next item in the list; relative to
     * the specified item.
     *
     * @param item
     * @returns {Array.length|*|number|boolean}
     */
    function hasNext(item) {
      return item ? inRange(indexOf(item) + 1) : false;
    }

    /*
     * Can the iterator proceed to the previous item in the list; relative to
     * the specified item.
     *
     * @param item
     * @returns {Array.length|*|number|boolean}
     */
    function hasPrevious(item) {
      return item ? inRange(indexOf(item) - 1) : false;
    }

    /*
     * Get item at specified index/position
     * @param index
     * @returns {*}
     */
    function itemAt(index) {
      return inRange(index) ? _items[index] : null;
    }

    /*
     * Find all elements matching the key/value pair
     * otherwise return null
     *
     * @param val
     * @param key
     *
     * @return array
     */
    function findBy(key, val) {
      return _items.filter(function(item) {
        return item[key] === val;
      });
    }

    /*
     * Add item to list
     * @param item
     * @param index
     * @returns {*}
     */
    function add(item, index) {
      if ( !item ) return -1;

      if (!angular.isNumber(index)) {
        index = _items.length;
      }

      _items.splice(index, 0, item);

      return indexOf(item);
    }

    /*
     * Remove item from list...
     * @param item
     */
    function remove(item) {
      if ( contains(item) ){
        _items.splice(indexOf(item), 1);
      }
    }

    /*
     * Get the zero-based index of the target item
     * @param item
     * @returns {*}
     */
    function indexOf(item) {
      return _items.indexOf(item);
    }

    /*
     * Boolean existence check
     * @param item
     * @returns {boolean}
     */
    function contains(item) {
      return item && (indexOf(item) > -1);
    }

    /*
     * Find the next item. If reloop is true and at the end of the list, it will 
     * go back to the first item. If given ,the `validate` callback will be used
     * determine whether the next item is valid. If not valid, it will try to find the
     * next item again.
     * @param item
     * @param {optional} validate
     * @returns {*}
     */
    function next(item, validate) {
      validate = validate || trueFn;

      if (contains(item)) {
        var index = indexOf(item) + 1,
        found = inRange(index) ? _items[ index ] : (reloop ? first() : null);

        return validate(found) ? found : next(found, validate);
      }

      return null;
    }

    /*
     * Find the previous item. If reloop is true and at the beginning of the list, it will 
     * go back to the last item. If given ,the `validate` callback will be used
     * determine whether the previous item is valid. If not valid, it will try to find the
     * previous item again.
     * @param item
     * @param {optional} validate
     * @returns {*}
     */
    function previous(item, validate) {
      validate = validate || trueFn;

      if (contains(item)) {
        var index = indexOf(item) - 1,
        found = inRange(index) ? _items[ index ] : (reloop ? last() : null);

        return validate(found) ? found : previous(found, validate);
      }

      return null;
    }

    /*
     * Return first item in the list
     * @returns {*}
     */
    function first() {
      return _items.length ? _items[0] : null;
    }

    /*
     * Return last item in the list...
     * @returns {*}
     */
    function last() {
      return _items.length ? _items[_items.length - 1] : null;
    }
  }

  /*
   * Angular's $cacheFactory doesn't have a keys() method,
   * so we add one ourself.
   */
  function cacheFactory(id, options) {
    var cache = $cacheFactory(id, options);

    var keys = {};
    cache._put = cache.put;
    cache.put = function(k,v) {
      keys[k] = true;
      return cache._put(k, v);
    };
    cache._remove = cache.remove;
    cache.remove = function(k) {
      delete keys[k];
      return cache._remove(k);
    };

    cache.keys = function() {
      return Object.keys(keys);
    };

    return cache;
  }
}]);

/* 
 * Since removing jQuery from the demos, some code that uses `element.focus()` is broken.
 *
 * We need to add `element.focus()`, because it's testable unlike `element[0].focus`.
 *
 * TODO(ajoslin): This should be added in a better place later.
 */

angular.element.prototype.focus = angular.element.prototype.focus || function() {
  if (this.length) {
    this[0].focus();
  }
  return this;
};
angular.element.prototype.blur = angular.element.prototype.blur || function() {
  if (this.length) {
    this[0].blur();
  }
  return this;
};
})();

(function() {
/*
 * @ngdoc module
 * @name material.components.animate
 * @description
 *
 * Ink and Popup Effects
 */
angular.module('material.animations', ['material.core'])
  .service('$mdEffects', [ 
    '$rootElement', 
    '$$rAF', 
    '$sniffer',
    '$q',
    MdEffects
  ]);

/*
 * @ngdoc service
 * @name $mdEffects
 * @module material.components.animate
 *
 * @description
 * The `$mdEffects` service provides a simple API for various
 * Material Design effects.
 *
 * @returns A `$mdEffects` object with the following properties:
 * - `{function(element,styles,duration)}` `inkBar` - starts ink bar
 * animation on specified DOM element
 * - `{function(element,parentElement,clickElement)}` `popIn` - animated show of element overlayed on parent element
 * - `{function(element,parentElement)}` `popOut` - animated close of popup overlay
 *
 */
function MdEffects($rootElement, $$rAF, $sniffer, $q) {

  var webkit = /webkit/i.test($sniffer.vendorPrefix);
  function vendorProperty(name) {
    return webkit ? 
      ('webkit' + name.charAt(0).toUpperCase() + name.substring(1)) :
      name;
  }

  var self;
  // Publish API for effects...
  return self = {
    popIn: popIn,

    /* Constants */
    TRANSITIONEND_EVENT: 'transitionend' + (webkit ? ' webkitTransitionEnd' : ''),
    ANIMATIONEND_EVENT: 'animationend' + (webkit ? ' webkitAnimationEnd' : ''),

    TRANSFORM: vendorProperty('transform'),
    TRANSITION: vendorProperty('transition'),
    TRANSITION_DURATION: vendorProperty('transitionDuration'),
    ANIMATION_PLAY_STATE: vendorProperty('animationPlayState'),
    ANIMATION_DURATION: vendorProperty('animationDuration'),
    ANIMATION_NAME: vendorProperty('animationName'),
    ANIMATION_TIMING: vendorProperty('animationTimingFunction'),
    ANIMATION_DIRECTION: vendorProperty('animationDirection')
  };

  // **********************************************************
  // API Methods
  // **********************************************************
  function popIn(element, parentElement, clickElement) {
    var deferred = $q.defer();
    parentElement.append(element);

    var startPos;
    if (clickElement) {
      var clickRect = clickElement[0].getBoundingClientRect();
      startPos = translateString(
        clickRect.left - element[0].offsetWidth,
        clickRect.top - element[0].offsetHeight, 
        0
      ) + ' scale(0.2)';
    } else {
      startPos = 'translate3d(0,100%,0) scale(0.5)';
    }

    element
      .css(self.TRANSFORM, startPos)
      .css('opacity', 0);
    
    $$rAF(function() {
      $$rAF(function() {
        element
          .addClass('md-active')
          .css(self.TRANSFORM, '')
          .css('opacity', '')
          .on(self.TRANSITIONEND_EVENT, finished);
      });
    });

    function finished(ev) {
      //Make sure this transitionend didn't bubble up from a child
      if (ev.target === element[0]) {
        element.off(self.TRANSITIONEND_EVENT, finished);
        deferred.resolve();
      }
    }

    return deferred.promise;
  }

  // **********************************************************
  // Utility Methods
  // **********************************************************


  function translateString(x, y, z) {
    return 'translate3d(' + Math.floor(x) + 'px,' + Math.floor(y) + 'px,' + Math.floor(z) + 'px)';
  }

}

})();

(function() {

angular.module('material.animations')

.directive('inkRipple', [
  '$mdInkRipple',
  InkRippleDirective
])

.factory('$mdInkRipple', [
  '$window',
  '$$rAF',
  '$mdEffects',
  '$timeout',
  '$mdUtil',
  InkRippleService
]);

function InkRippleDirective($mdInkRipple) {
  return function(scope, element, attr) {
    if (attr.inkRipple == 'checkbox') {
      $mdInkRipple.attachCheckboxBehavior(element);
    } else {
      $mdInkRipple.attachButtonBehavior(element);
    }
  };
}

function InkRippleService($window, $$rAF, $mdEffects, $timeout, $mdUtil) {

  return {
    attachButtonBehavior: attachButtonBehavior,
    attachCheckboxBehavior: attachCheckboxBehavior,
    attach: attach
  };

  function attachButtonBehavior(element) {
    return attach(element, {
      mousedown: true,
      center: false,
      animationDuration: 350,
      mousedownPauseTime: 175,
      animationName: 'inkRippleButton',
      animationTimingFunction: 'linear'
    });
  }

  function attachCheckboxBehavior(element) {
    return attach(element, {
      mousedown: true,
      center: true,
      animationDuration: 300,
      mousedownPauseTime: 180,
      animationName: 'inkRippleCheckbox',
      animationTimingFunction: 'linear'
    });
  }

  function attach(element, options) {
    // Parent element with noink attr? Abort.
    if (element.controller('noink')) return angular.noop;
    var contentParent = element.controller('mdContent');

    options = angular.extend({
      mousedown: true,
      hover: true,
      focus: true,
      center: false,
      animationDuration: 300,
      mousedownPauseTime: 150,
      animationName: '',
      animationTimingFunction: 'linear'
    }, options || {});

    var rippleContainer;
    var node = element[0];
    var hammertime = new Hammer(node);

    if (options.mousedown) {
      hammertime.on('hammer.input', onInput);
    }

    // Publish self-detach method if desired...
    return function detach() {
      hammertime.destroy();
      if (rippleContainer) {
        rippleContainer.remove();
      }
    };

    function rippleIsAllowed() {
      return !element[0].hasAttribute('disabled');
    }

    function createRipple(left, top, positionsAreAbsolute) {

      var rippleEl = angular.element('<div class="md-ripple">')
            .css($mdEffects.ANIMATION_DURATION, options.animationDuration + 'ms')
            .css($mdEffects.ANIMATION_NAME, options.animationName)
            .css($mdEffects.ANIMATION_TIMING, options.animationTimingFunction)
            .on($mdEffects.ANIMATIONEND_EVENT, function() {
              rippleEl.remove();
            });

      if (!rippleContainer) {
        rippleContainer = angular.element('<div class="md-ripple-container">');
        element.append(rippleContainer);
      }
      rippleContainer.append(rippleEl);

      var containerWidth = rippleContainer.prop('offsetWidth');

      if (options.center) {
        left = containerWidth / 2;
        top = rippleContainer.prop('offsetHeight') / 2;
      } else if (positionsAreAbsolute) {
        var elementRect = node.getBoundingClientRect();
        left -= elementRect.left;
        top -= elementRect.top;
      }

      if (contentParent) {
        top += contentParent.$element.prop('scrollTop');
      }

      var css = {
        'background-color': $window.getComputedStyle(rippleEl[0]).color || 
          $window.getComputedStyle(node).color,
        'border-radius': (containerWidth / 2) + 'px',

        left: (left - containerWidth / 2) + 'px',
        width: containerWidth + 'px',

        top: (top - containerWidth / 2) + 'px',
        height: containerWidth + 'px'
      };
      css[$mdEffects.ANIMATION_DURATION] = options.fadeoutDuration + 'ms';
      rippleEl.css(css);

      return rippleEl;
    }

    var pauseTimeout;
    var rippleEl;
    function onInput(ev) {
      if (ev.eventType === Hammer.INPUT_START && ev.isFirst && rippleIsAllowed()) {

        rippleEl = createRipple(ev.center.x, ev.center.y, true);
        pauseTimeout = $timeout(function() {
          rippleEl && rippleEl.css($mdEffects.ANIMATION_PLAY_STATE, 'paused');
        }, options.mousedownPauseTime, false);

        rippleEl.on('$destroy', function() {
          rippleEl = null;
        });

      } else if (ev.eventType === Hammer.INPUT_END && ev.isFinal) {
        $timeout.cancel(pauseTimeout);
        rippleEl && rippleEl.css($mdEffects.ANIMATION_PLAY_STATE, '');
      }
    }

  }

}
})();

(function() {
angular.module('material.animations')

/**
 * noink/nobar/nostretch directive: make any element that has one of
 * these attributes be given a controller, so that other directives can 
 * `require:` these and see if there is a `no<xxx>` parent attribute.
 *
 * @usage
 * <hljs lang="html">
 * <parent noink>
 *   <child detect-no>
 *   </child>
 * </parent>
 * </hljs>
 *
 * <hljs lang="js">
 * myApp.directive('detectNo', function() {
 *   return {
 *     require: ['^?noink', ^?nobar'],
 *     link: function(scope, element, attr, ctrls) {
 *       var noinkCtrl = ctrls[0];
 *       var nobarCtrl = ctrls[1];
 *       if (noInkCtrl) {
 *         alert("the noink flag has been specified on an ancestor!");
 *       }
 *       if (nobarCtrl) {
 *         alert("the nobar flag has been specified on an ancestor!");
 *       }
 *     }
 *   };
 * });
 * </hljs>
 */
.directive({
  noink: attrNoDirective(),
  nobar: attrNoDirective(),
  nostretch: attrNoDirective()
});

function attrNoDirective() {
  return function() {
    return {
      controller: angular.noop
    };
  };
}
})();

(function() {
/*
 * @ngdoc module
 * @name material.components.backdrop
 * @description Backdrop
 */

/**
 * @ngdoc directive
 * @name mdBackdrop
 * @module material.components.backdrop
 *
 * @restrict E
 *
 * @description
 * `<md-backdrop>` is a backdrop element used by other coponents, such as dialog and bottom sheet.
 * Apply class `opaque` to make the backdrop use the theme backdrop color.
 *
 */
angular.module('material.components.backdrop', [
  'material.services.theming'
])
.directive('mdBackdrop', [
  '$mdTheming',
  BackdropDirective
]);

function BackdropDirective($mdTheming) {
  return $mdTheming;
}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.bottomSheet
 * @description
 * BottomSheet
 */
angular.module('material.components.bottomSheet', [
  'material.components.backdrop',
  'material.services.interimElement',
  'material.services.theming'
])
.directive('mdBottomSheet', [
  MdBottomSheetDirective
])
.factory('$mdBottomSheet', [
  '$$interimElement',
  '$animate',
  '$mdEffects',
  '$timeout',
  '$$rAF',
  '$compile',
  '$mdTheming',
  MdBottomSheet
]);

function MdBottomSheetDirective() {
  return {
    restrict: 'E'
  };
}

/**
 * @ngdoc service
 * @name $mdBottomSheet
 * @module material.components.bottomSheet
 *
 * @description
 * `$mdBottomSheet` opens a bottom sheet over the app and provides a simple promise API.
 *
 * ### Restrictions
 * 
 * - The bottom sheet's template must have an outer `<md-bottom-sheet>` element.
 * - Add the `md-grid` class to the bottom sheet for a grid layout.
 * - Add the `md-list` class to the bottom sheet for a list layout.
 *
 * @usage
 * <hljs lang="html">
 * <div ng-controller="MyController">
 *   <md-button ng-click="openBottomSheet()">
 *     Open a Bottom Sheet!
 *   </md-button>
 * </div>
 * </hljs>
 * <hljs lang="js">
 * var app = angular.module('app', ['ngMaterial']);
 * app.controller('MyController', function($scope, $mdBottomSheet) {
 *   $scope.openBottomSheet = function() {
 *     $mdBottomSheet.show({
 *       template: '<md-bottom-sheet>Hello!</md-bottom-sheet>'
 *     });
 *   };
 * });
 * </hljs>
 */

 /**
 * @ngdoc method
 * @name $mdBottomSheet#show
 *
 * @description
 * Show a bottom sheet with the specified options.
 *
 * @param {object} options An options object, with the following properties:
 *
 *   - `templateUrl` - `{string=}`: The url of an html template file that will
 *   be used as the content of the bottom sheet. Restrictions: the template must
 *   have an outer `md-bottom-sheet` element.
 *   - `template` - `{string=}`: Same as templateUrl, except this is an actual
 *   template string.
 *   - `controller` - `{string=}`: The controller to associate with this bottom sheet.
 *   - `locals` - `{string=}`: An object containing key/value pairs. The keys will
 *   be used as names of values to inject into the controller. For example, 
 *   `locals: {three: 3}` would inject `three` into the controller with the value
 *   of 3.
 *   - `targetEvent` - `{DOMClickEvent=}`: A click's event object. When passed in as an option, 
 *   the location of the click will be used as the starting point for the opening animation
 *   of the the dialog.
 *   - `resolve` - `{object=}`: Similar to locals, except it takes promises as values
 *   and the bottom sheet will not open until the promises resolve.
 *   - `controllerAs` - `{string=}`: An alias to assign the controller to on the scope.
 *
 * @returns {promise} A promise that can be resolved with `$mdBottomSheet.hide()` or
 * rejected with `$mdBottomSheet.cancel()`.
 */

/**
 * @ngdoc method
 * @name $mdBottomSheet#hide
 *
 * @description
 * Hide the existing bottom sheet and resolve the promise returned from 
 * `$mdBottomSheet.show()`.
 *
 * @param {*=} response An argument for the resolved promise.
 *
 */

/**
 * @ngdoc method
 * @name $mdBottomSheet#cancel
 *
 * @description
 * Hide the existing bottom sheet and reject the promise returned from 
 * `$mdBottomSheet.show()`.
 *
 * @param {*=} response An argument for the rejected promise.
 *
 */

function MdBottomSheet($$interimElement, $animate, $mdEffects, $timeout, $$rAF, $compile, $mdTheming) {
  var backdrop;

  var $mdBottomSheet;
  return $mdBottomSheet = $$interimElement({
    themable: true,
    targetEvent: null,
    onShow: onShow,
    onRemove: onRemove,
  });

  function onShow(scope, element, options) {
    // Add a backdrop that will close on click
    backdrop = $compile('<md-backdrop class="md-opaque ng-enter">')(scope);
    backdrop.on('click touchstart', function() {
      $timeout($mdBottomSheet.cancel);
    });
    $mdTheming.inherit(backdrop, options.parent);

    $animate.enter(backdrop, options.parent, null);

    var bottomSheet = new BottomSheet(element);
    options.bottomSheet = bottomSheet;

    // Give up focus on calling item
    options.targetEvent && angular.element(options.targetEvent.target).blur();
    $mdTheming.inherit(bottomSheet.element, options.parent);

    return $animate.enter(bottomSheet.element, options.parent);

  }

  function onRemove(scope, element, options) {
    var bottomSheet = options.bottomSheet;
    $animate.leave(backdrop);
    return $animate.leave(bottomSheet.element).then(function() {
      bottomSheet.cleanup();

      // Restore focus
      options.targetEvent && angular.element(options.targetEvent.target).focus();
    });
  }

  /**
   * BottomSheet class to apply bottom-sheet behavior to an element
   */
  function BottomSheet(element) {
    var MAX_OFFSET = 80; // amount past the bottom of the element that we can drag down, this is same as in _bottomSheet.scss
    var WIGGLE_AMOUNT = 20; // point where it starts to get "harder" to drag
    var CLOSING_VELOCITY = 10; // how fast we need to flick down to close the sheet
    var startY, lastY, velocity, transitionDelay, startTarget;

    // coercion incase $mdCompiler returns multiple elements
    element = element.eq(0);

    element.on('touchstart', onTouchStart);
    element.on('touchmove', onTouchMove);
    element.on('touchend', onTouchEnd);

    return {
      element: element,
      cleanup: function cleanup() {
        element.off('touchstart', onTouchStart);
        element.off('touchmove', onTouchMove);
        element.off('touchend', onTouchEnd);
      }
    };

    function onTouchStart(e) {
      e.preventDefault();
      startTarget = e.target;
      startY = getY(e);
      
      // Disable transitions on transform so that it feels fast
      transitionDelay = element.css($mdEffects.TRANSITION_DURATION);
      element.css($mdEffects.TRANSITION_DURATION, '0s');
    }

    function onTouchEnd(e) {
      // Re-enable the transitions on transforms
      element.css($mdEffects.TRANSITION_DURATION, transitionDelay);

      var currentY = getY(e);
      // If we didn't scroll much, and we didn't change targets, assume its a click
      if ( Math.abs(currentY - startY) < 5  && e.target == startTarget) {
        angular.element(e.target).triggerHandler('click');
      } else {
        // If they went fast enough, trigger a close.
        if (velocity > CLOSING_VELOCITY) {
          $timeout($mdBottomSheet.cancel);

        // Otherwise, untransform so that we go back to our normal position
        } else {
          setTransformY(undefined);
        }
      }
    }

    function onTouchMove(e) {
      var currentY = getY(e);
      var delta = currentY - startY;

      velocity = currentY - lastY;
      lastY = currentY;
      
      // Do some conversion on delta to get a friction-like effect
      delta = adjustedDelta(delta);
      setTransformY(delta + MAX_OFFSET);
    }

    /**
     * Helper function to find the Y aspect of various touch events.
     **/
    function getY(e) {
      var touch = e.touches && e.touches.length ? e.touches[0] : e.changedTouches[0];
      return touch.clientY;
    }

    /**
     * Transform the element along the y-axis
     **/
    function setTransformY(amt) {
      if (amt === null || amt === undefined) {
        element.css($mdEffects.TRANSFORM, '');
      } else {
        element.css($mdEffects.TRANSFORM, 'translate3d(0, ' + amt + 'px, 0)');
      }
    }

    // Returns a new value for delta that will never exceed MAX_OFFSET_AMOUNT
    // Will get harder to exceed it as you get closer to it
    function adjustedDelta(delta) {
      if ( delta < 0  && delta < -MAX_OFFSET + WIGGLE_AMOUNT) {
        delta = -delta;
        var base = MAX_OFFSET - WIGGLE_AMOUNT;
        delta = Math.max(-MAX_OFFSET, -Math.min(MAX_OFFSET - 5, base + ( WIGGLE_AMOUNT * (delta - base)) / MAX_OFFSET) - delta / 50);
      }

      return delta;
    }
  }

}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.button
 * @description
 *
 * Button
 */
angular.module('material.components.button', [
  'material.core',
  'material.animations',
  'material.services.aria',
  'material.services.theming',
])
  .directive('mdButton', [
    '$mdInkRipple',
    '$mdTheming',
    '$mdAria',
    MdButtonDirective
  ]);

/**
 * @ngdoc directive
 * @name mdButton
 * @module material.components.button
 *
 * @restrict E
 *
 * @description
 * `<md-button>` is a button directive with optional ink ripples (default enabled).
 *
 * If you supply a `href` or `ng-href` attribute, it will become an `<a>` element. Otherwise, it will
 * become a `<button>` element.
 *
 * @param {boolean=} noink If present, disable ripple ink effects.
 * @param {boolean=} disabled If present, disable selection.
 * @param {string=} aria-label Publish the button label used by screen-readers for accessibility. Defaults to the button's text.
 *
 * @usage
 * <hljs lang="html">
 *  <md-button>
 *    Button
 *  </md-button>
 *  <md-button href="http://google.com" class="md-button-colored">
 *    I'm a link
 *  </md-button>
 *  <md-button disabled class="md-colored">
 *    I'm a disabled button
 *  </md-button>
 * </hljs>
 */
function MdButtonDirective($mdInkRipple, $mdTheming, $mdAria) {

  return {
    restrict: 'E',
    replace: true,
    transclude: true,
    template: getTemplate,
    link: postLink
  };

  function isAnchor(attr) {
    return angular.isDefined(attr.href) || angular.isDefined(attr.ngHref);
  }
  
  function getTemplate(element, attr) {
    var tag = isAnchor(attr) ? 'a' : 'button';
    //We need to manually pass disabled to the replaced element because
    //of a bug where it isn't always passed.
    var disabled = element[0].hasAttribute('disabled') ? ' disabled ' : ' ';

    return '<' + tag + disabled + 'class="md-button" ng-transclude></' + tag + '>';
  }

  function postLink(scope, element, attr) {
    var node = element[0];
    $mdTheming(element);
    $mdInkRipple.attachButtonBehavior(element);

    var elementHasText = node.textContent.trim();
    if (!elementHasText) {
      $mdAria.expect(element, 'aria-label');
    }

    // For anchor elements, we have to set tabindex manually when the 
    // element is disabled
    if (isAnchor(attr)) {
      scope.$watch(function() {
        return node.hasAttribute('disabled');
      }, function(isDisabled) {
        element.attr('tabindex', isDisabled ? -1 : 0);
      });
    }
  }

}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.card
 *
 * @description
 * Card components.
 */
angular.module('material.components.card', [
])
  .directive('mdCard', [
    mdCardDirective 
  ]);



/**
 * @ngdoc directive
 * @name mdCard
 * @module material.components.card
 *
 * @restrict E
 *
 * @description
 * The `<md-card>` directive is a container element used within `<md-content>` containers.
 *
 * Cards have constant width and variable heights; where the maximum height is limited to what can
 * fit within a single view on a platform, but it can temporarily expand as needed
 *
 * @usage
 * <hljs lang="html">
 * <md-card>
 *  <img src="/img/washedout.png" class="md-card-image">
 *  <h2>Paracosm</h2>
 *  <p>
 *    The titles of Washed Out's breakthrough song and the first single from Paracosm share the * two most important words in Ernest Greene's musical language: feel it. It's a simple request, as well...
 *  </p>
 * </md-card>
 * </hljs>
 *
 */
function mdCardDirective() {
  return {
    restrict: 'E',
    link: function($scope, $element, $attr) {
    }
  };
}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.checkbox
 * @description Checkbox module!
 */
angular.module('material.components.checkbox', [
  'material.core',
  'material.animations',
  'material.services.theming',
  'material.services.aria'
])
  .directive('mdCheckbox', [ 
    'inputDirective',
    '$mdInkRipple',
    '$mdAria',
    '$mdConstant',
    '$mdTheming',
    MdCheckboxDirective
  ]);

/**
 * @ngdoc directive
 * @name mdCheckbox
 * @module material.components.checkbox
 * @restrict E
 *
 * @description
 * The checkbox directive is used like the normal [angular checkbox](https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D).
 *
 * @param {string} ngModel Assignable angular expression to data-bind to.
 * @param {string=} name Property name of the form under which the control is published.
 * @param {expression=} ngTrueValue The value to which the expression should be set when selected.
 * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.
 * @param {string=} ngChange Angular expression to be executed when input changes due to user interaction with the input element.
 * @param {boolean=} noink Use of attribute indicates use of ripple ink effects
 * @param {boolean=} disabled Use of attribute indicates the switch is disabled: no ink effects and not selectable
 * @param {string=} ariaLabel Publish the button label used by screen-readers for accessibility. Defaults to the checkbox's text.
 *
 * @usage
 * <hljs lang="html">
 * <md-checkbox ng-model="isChecked" aria-label="Finished?">
 *   Finished ?
 * </md-checkbox>
 *
 * <md-checkbox noink ng-model="hasInk" aria-label="No Ink Effects">
 *   No Ink Effects
 * </md-checkbox>
 *
 * <md-checkbox disabled ng-model="isDisabled" aria-label="Disabled">
 *   Disabled
 * </md-checkbox>
 *
 * </hljs>
 *
 */
function MdCheckboxDirective(inputDirectives, $mdInkRipple, $mdAria, $mdConstant, $mdTheming) {
  var inputDirective = inputDirectives[0];

  var CHECKED_CSS = 'md-checked';

  return {
    restrict: 'E',
    transclude: true,
    require: '?ngModel',
    template: 
      '<div class="md-container" ink-ripple="checkbox">' +
        '<div class="md-icon"></div>' +
      '</div>' +
      '<div ng-transclude class="md-label"></div>',
    compile: compile
  };

  // **********************************************************
  // Private Methods
  // **********************************************************

  function compile (tElement, tAttrs) {

    tAttrs.type = 'checkbox';
    tAttrs.tabIndex = 0;
    tElement.attr('role', tAttrs.type);

    return function postLink(scope, element, attr, ngModelCtrl) {
      var checked = false;
      $mdTheming(element);

      // Create a mock ngModel if the user doesn't provide one
      ngModelCtrl = ngModelCtrl || {
        $setViewValue: function(value) {
          this.$viewValue = value;
        },
        $parsers: [],
        $formatters: []
      };

      $mdAria.expectWithText(tElement, 'aria-label');

      // Reuse the original input[type=checkbox] directive from Angular core.
      // This is a bit hacky as we need our own event listener and own render
      // function.
      inputDirective.link.pre(scope, {
        on: angular.noop,
        0: {}
      }, attr, [ngModelCtrl]);

      element.on('click', listener);
      element.on('keypress', keypressHandler);
      ngModelCtrl.$render = render;

      function keypressHandler(ev) {
        if(ev.which === $mdConstant.KEY_CODE.SPACE) {
          ev.preventDefault();
          listener(ev);
        }
      }
      function listener(ev) {
        if (element[0].hasAttribute('disabled')) return;

        scope.$apply(function() {
          checked = !checked;
          ngModelCtrl.$setViewValue(checked, ev && ev.type);
          ngModelCtrl.$render();
        });
      }

      function render() {
        checked = ngModelCtrl.$viewValue;
        if(checked) {
          element.addClass(CHECKED_CSS);
        } else {
          element.removeClass(CHECKED_CSS);
        }
      }
    };
  }
}


})();

(function() {
/**
 * @ngdoc module
 * @name material.components.content
 *
 * @description
 * Scrollable content
 */
angular.module('material.components.content', [
  'material.services.theming',
  'material.services.registry'
])
  .directive('mdContent', [
    '$mdTheming',
    mdContentDirective
  ]);

/**
 * @ngdoc directive
 * @name mdContent
 * @module material.components.content
 *
 * @restrict E
 *
 * @description
 * The `<md-content>` directive is a container element useful for scrollable content
 *
 * ### Restrictions
 *
 * - Add the `md-padding` class to make the content padded.
 *
 * @usage
 * <hljs lang="html">
 *  <md-content class="md-padding">
 *      Lorem ipsum dolor sit amet, ne quod novum mei.
 *  </md-content>
 * </hljs>
 *
 */
function mdContentDirective($mdTheming) {
  return {
    restrict: 'E',
    controller: ['$scope', '$element', ContentController],
    link: function($scope, $element, $attr) {
      $mdTheming($element);
      $scope.$broadcast('$mdContentLoaded', $element);
    }
  };

  function ContentController($scope, $element) {
    this.$scope = $scope;
    this.$element = $element;
  }
}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.dialog
 */
angular.module('material.components.dialog', [
  'material.core',
  'material.animations',
  'material.components.backdrop',
  'material.services.compiler',
  'material.services.aria',
  'material.services.interimElement',
  'material.services.theming',
])
  .directive('mdDialog', [
    '$$rAF',
    '$mdTheming',
    MdDialogDirective
  ])
  .factory('$mdDialog', [
    '$timeout',
    '$rootElement',
    '$compile',
    '$mdEffects',
    '$animate',
    '$mdAria',
    '$$interimElement',
    '$mdUtil',
    '$mdConstant',
    '$mdTheming',
    MdDialogService
  ]);

function MdDialogDirective($$rAF, $mdTheming) {
  return {
    restrict: 'E',
    link: function(scope, element, attr) {
      $mdTheming(element);
      $$rAF(function() {
        var content = element[0].querySelector('md-content');
        if (content && content.scrollHeight > content.clientHeight) {
          element.addClass('md-content-overflow');
        }
      });
    }
  };
}

/**
 * @ngdoc service
 * @name $mdDialog
 * @module material.components.dialog
 *
 * @description
 * `$mdDialog` opens a dialog over the app and provides a simple promise API.
 *
 * ### Restrictions
 *
 * - The dialog is always given an isolate scope.
 * - The dialog's template must have an outer `<md-dialog>` element.
 *   Inside, use an `<md-content>` element for the dialog's content, and use
 *   an element with class `md-actions` for the dialog's actions.  
 *
 * @usage
 * <hljs lang="html">
 * <div ng-controller="MyController">
 *   <md-button ng-click="openDialog($event)">
 *     Open a Dialog from this button!
 *   </md-button>
 * </div>
 * </hljs>
 *
 * <hljs lang="js">
 * var app = angular.module('app', ['ngMaterial']);
 * app.controller('MyController', function($scope, $mdDialog) {
 *   $scope.openDialog = function($event) {
 *     $mdDialog.show({
 *       targetEvent: $event,
 *       template:
 *         '<md-dialog>' +
 *         '  <md-content>Hello {{ userName }}!</md-content>' +
 *         '  <div class="md-actions">' +
 *         '    <md-button ng-click="closeDialog()">' +
 *         '      Close' +
 *         '    </md-button>' +
 *         '  </div>' +
 *         '</md-dialog>',
 *       controller: 'DialogController',
 *       onComplete: afterShowAnimation,
 *       locals: { name: 'Bobby' }
 *     });
 *
 *     // When the 'enter' animation finishes...
 *     function afterShowAnimation(scope, element, options) {
 *        // post-show code here: DOM element focus, etc.
 *     }
 * });
 * app.controller('DialogController', function($scope, $mdDialog, name) {
 *   $scope.userName = name;
 *   $scope.closeDialog = function() {
 *     $mdDialog.hide();
 *   };
 * });
 * </hljs>
 *
 */

/**
 *
 * @ngdoc method
 * @name $mdDialog#show
 *
 * @description
 * Show a dialog with the specified options.
 *
 * @param {object} options An options object, with the following properties:
 *   - `templateUrl` - `{string=}`: The url of a template that will be used as the content
 *   of the dialog. 
 *   - `template` - `{string=}`: Same as templateUrl, except this is an actual template string.
 *   - `targetEvent` - `{DOMClickEvent=}`: A click's event object. When passed in as an option, 
 *     the location of the click will be used as the starting point for the opening animation
 *     of the the dialog.
 *   - `hasBackdrop` - `{boolean=}`: Whether there should be an opaque backdrop behind the dialog.
 *     Default true.
 *   - `clickOutsideToClose` - `{boolean=}`: Whether the user can click outside the dialog to
 *     close it. Default true.
 *   - `escapeToClose` - `{boolean=}`: Whether the user can press escape to close the dialog.
 *     Default true.
 *   - `controller` - `{string=}`: The controller to associate with the dialog. The controller
 *     will be injected with the local `$hideDialog`, which is a function used to hide the dialog.
 *   - `locals` - `{object=}`: An object containing key/value pairs. The keys will be used as names
 *     of values to inject into the controller. For example, `locals: {three: 3}` would inject
 *     `three` into the controller, with the value 3.
 *   - `resolve` - `{object=}`: Similar to locals, except it takes promises as values, and the
 *     toast will not open until all of the promises resolve.
 *   - `controllerAs` - `{string=}`: An alias to assign the controller to on the scope.
 *   - `parent` - `{element=}`: The element to append the dialog to. Defaults to appending
 *     to the root element of the application.
 *   - `onComplete` `{function=}`: Callback function used to announce when the show() action is
 *     finished.
 *
 * @returns {promise} A promise that can be resolved with `$mdDialog.hide()` or
 * rejected with `mdDialog.cancel()`.
 */

/**
 * @ngdoc method
 * @name $mdDialog#hide
 *
 * @description
 * Hide an existing dialog and resolve the promise returned from `$mdDialog.show()`.
 *
 * @param {*=} response An argument for the resolved promise.
 *
 */

/**
 * @ngdoc method
 * @name $mdDialog#cancel
 *
 * @description
 * Hide an existing dialog and reject the promise returned from `$mdDialog.show()`.
 *
 * @param {*=} response An argument for the rejected promise.
 *
 */

function MdDialogService($timeout, $rootElement, $compile, $mdEffects, $animate, $mdAria, $$interimElement, $mdUtil, $mdConstant, $mdTheming) {

  var $dialogService;
  return $dialogService = $$interimElement({
    hasBackdrop: true,
    isolateScope: true,
    onShow: onShow,
    onRemove: onRemove,
    clickOutsideToClose: true,
    escapeToClose: true,
    targetEvent: null,
    transformTemplate: function(template) {
      return '<div class="md-dialog-container">' + template + '</div>';
    }
  });

  function onShow(scope, element, options) {
    // Incase the user provides a raw dom element, always wrap it in jqLite
    options.parent = angular.element(options.parent);

    options.popInTarget = angular.element((options.targetEvent || {}).target); 
    var closeButton = findCloseButton();

    configureAria(element.find('md-dialog'));

    if (options.hasBackdrop) {
      options.backdrop = $compile('<md-backdrop class="md-opaque ng-enter">')(scope);
      $mdTheming.inherit(options.backdrop, options.parent);
      $animate.enter(options.backdrop, options.parent, null);
    }

    return $mdEffects.popIn(
      element, 
      options.parent, 
      options.popInTarget.length && options.popInTarget
    )
    .then(function() {
      if (options.escapeToClose) {
        options.rootElementKeyupCallback = function(e) {
          if (e.keyCode === $mdConstant.KEY_CODE.ESCAPE) {
            $timeout($dialogService.cancel);
          }
        };
        $rootElement.on('keyup', options.rootElementKeyupCallback);
      }

      if (options.clickOutsideToClose) {
        options.dialogClickOutsideCallback = function(e) {
          // Only close if we click the flex container outside the backdrop
          if (e.target === element[0]) {
            $timeout($dialogService.cancel);
          }
        };
        element.on('click', options.dialogClickOutsideCallback);
      }
      closeButton.focus();
    });


    function findCloseButton() {
      //If no element with class dialog-close, try to find the last
      //button child in md-actions and assume it is a close button
      var closeButton = element[0].querySelector('.dialog-close');
      if (!closeButton) {
        var actionButtons = element[0].querySelectorAll('.md-actions button');
        closeButton = actionButtons[ actionButtons.length - 1 ];
      }
      return angular.element(closeButton);
    }

  }

  function onRemove(scope, element, options) {

    if (options.backdrop) {
      $animate.leave(options.backdrop);
      element.data('backdrop', undefined);
    }
    if (options.escapeToClose) {
      $rootElement.off('keyup', options.rootElementKeyupCallback);
    }
    if (options.clickOutsideToClose) {
      element.off('click', options.dialogClickOutsideCallback);
    }
    return $animate.leave(element).then(function() {
      element.remove();
      options.popInTarget && options.popInTarget.focus();
    });

  }

  /**
   * Inject ARIA-specific attributes appropriate for Dialogs
   */
  function configureAria(element) {
    element.attr({
      'role': 'dialog'
    });

    var dialogContent = element.find('md-content');
    if (dialogContent.length === 0){
      dialogContent = element;
    }
    $mdAria.expectAsync(element, 'aria-label', function() {
      return $mdUtil.stringFromTextBody(dialogContent.text(), 3);
    });
  }
}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.divider
 * @description Divider module!
 */
angular.module('material.components.divider', [
  'material.animations',
  'material.services.aria',
  'material.services.theming'
])
.directive('mdDivider', [
  '$mdTheming',
  MdDividerDirective
]);

function MdDividerController(){}

/**
 * @ngdoc directive
 * @name mdDivider
 * @module material.components.divider
 * @restrict E
 *
 * @description
 * Dividers group and separate content within lists and page layouts using strong visual and spatial distinctions. This divider is a thin rule, lightweight enough to not distract the user from content.
 *
 * @param {boolean=} inset Add this attribute to activate the inset divider style.
 * @usage
 * <hljs lang="html">
 * <md-divider></md-divider>
 *
 * <md-divider inset></md-divider>
 * </hljs>
 *
 */
function MdDividerDirective($mdTheming) {
  return {
    restrict: 'E',
    link: $mdTheming,
    controller: [MdDividerController]
  };
}
})();

(function() {
/*
 * @ngdoc module
 * @name material.components.icon
 * @description
 * Icon
 */
angular.module('material.components.icon', [])
  .directive('mdIcon', [
    mdIconDirective
  ]);

/*
 * @ngdoc directive
 * @name mdIcon
 * @module material.components.icon
 *
 * @restrict E
 *
 * @description
 * The `<md-icon>` directive is an element useful for SVG icons
 *
 * @usage
 * <hljs lang="html">
 *  <md-icon icon="/img/icons/ic_access_time_24px.svg">
 *  </md-icon>
 * </hljs>
 *
 */
function mdIconDirective() {
  return {
    restrict: 'E',
    template: '<object class="md-icon"></object>',
    compile: function(element, attr) {
      var object = angular.element(element[0].children[0]);
      if(angular.isDefined(attr.icon)) {
        object.attr('data', attr.icon);
      }
    }
  };
}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.list
 * @description
 * List module
 */
angular.module('material.components.list', [])

.directive('mdList', [
  mdListDirective
])
.directive('mdItem', [
  mdItemDirective
]);

/**
 * @ngdoc directive
 * @name mdList
 * @module material.components.list
 *
 * @restrict E
 *
 * @description
 * The `<md-list>` directive is a list container for 1..n `<md-item>` tags.
 *
 * @usage
 * <hljs lang="html">
 * <md-list>
 *  <md-item ng-repeat="item in todos">
 *    <div class="md-tile-left">
 *      <img ng-src="{{item.face}}" class="face" alt="{{item.who}}">
 *    </div>
 *    <div class="md-tile-content">
 *      <h3>{{item.what}}</h3>
 *      <h4>{{item.who}}</h4>
 *      <p>
 *        {{item.notes}}
 *      </p>
 *    </div>
 *
 *  </md-item>
 * </md-list>
 * </hljs>
 *
 */
function mdListDirective() {
  return {
    restrict: 'E',
    link: function($scope, $element, $attr) {
      $element.attr({
        'role' : 'list'
      });
    }
  };
}

/**
 * @ngdoc directive
 * @name mdItem
 * @module material.components.list
 *
 * @restrict E
 *
 * @description
 * The `<md-item>` directive is a container intended for row items in a `<md-list>` container.
 *
 * @usage
 * <hljs lang="html">
 *  <md-list>
 *    <md-item>
 *            Item content in list
 *    </md-item>
 *  </md-list>
 * </hljs>
 *
 */
function mdItemDirective() {
  return {
    restrict: 'E',
    link: function($scope, $element, $attr) {
      $element.attr({
        'role' : 'listitem'
      });
    }
  };
}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.progressCircular
 * @description Circular Progress module!
 */
angular.module('material.components.progressCircular', [
  'material.animations',
  'material.services.aria',
  'material.services.theming',
])
  .directive('mdProgressCircular', [
    '$$rAF',
    '$mdEffects',
    '$mdTheming',
    MdProgressCircularDirective
  ]);

/**
 * @ngdoc directive
 * @name mdProgressCircular
 * @module material.components.progressCircular
 * @restrict E
 *
* @description
 * The circular progress directive is used to make loading content in your app as delightful and painless as possible by minimizing the amount of visual change a user sees before they can view and interact with content.
 *
 * For operations where the percentage of the operation completed can be determined, use a determinate indicator. They give users a quick sense of how long an operation will take.
 *
 * For operations where the user is asked to wait a moment while something finishes up, and it’s not necessary to expose what's happening behind the scenes and how long it will take, use an indeterminate indicator.
 *
 * @param {string} mode Select from one of two modes: determinate and indeterminate.
 * @param {number=} value In determinate mode, this number represents the percentage of the circular progress. Default: 0
 * @param {number=} diameter This specifies the diamter of the circular progress. Default: 48
 *
 * @usage
 * <hljs lang="html">
 * <md-progress-circular mode="determinate" value="..."></md-progress-circular>
 *
 * <md-progress-circular mode="determinate" ng-value="..."></md-progress-circular>
 *
 * <md-progress-circular mode="determinate" value="..." diameter="100"></md-progress-circular>
 *
 * <md-progress-circular mode="indeterminate"></md-progress-circular>
 * </hljs>
 */
function MdProgressCircularDirective($$rAF, $mdEffects, $mdTheming) {
  var fillRotations = new Array(101),
    fixRotations = new Array(101);

  for (var i = 0; i < 101; i++) {
    var percent = i / 100;
    var rotation = Math.floor(percent * 180);

    fillRotations[i] = 'rotate(' + rotation.toString() + 'deg)';
    fixRotations[i] = 'rotate(' + (rotation * 2).toString() + 'deg)';
  }

  return {
    restrict: 'E',
    template: 
      '<div class="md-wrapper1"><div class="md-wrapper2"><div class="md-circle">' +
        '<div class="md-mask md-full">' +
          '<div class="md-fill"></div>' +
        '</div>' +
        '<div class="md-mask md-half">' +
          '<div class="md-fill"></div>' +
          '<div class="md-fill md-fix"></div>' +
        '</div>' +
        '<div class="md-shadow"></div>' +
      '</div>' +
      '<div class="md-inset"></div></div></div>',
    compile: compile
  };

  function compile(tElement, tAttrs, transclude) {
    tElement.attr('aria-valuemin', 0);
    tElement.attr('aria-valuemax', 100);
    tElement.attr('role', 'progressbar');

    return postLink;
  }

  function postLink(scope, element, attr) {
    $mdTheming(element);
    var circle = element[0],
      fill = circle.querySelectorAll('.md-fill, .md-mask.md-full'),
      fix = circle.querySelectorAll('.md-fill.md-fix'),
      i, clamped, fillRotation, fixRotation;

    var diameter = attr.diameter || 48;
    var scale = diameter/48;

    circle.style[$mdEffects.TRANSFORM] = 'scale(' + scale.toString() + ')';

    attr.$observe('value', function(value) {
      clamped = clamp(value);
      fillRotation = fillRotations[clamped];
      fixRotation = fixRotations[clamped];

      element.attr('aria-valuenow', clamped);

      for (i = 0; i < fill.length; i++) {
        fill[i].style[$mdEffects.TRANSFORM] = fillRotation;
      }

      for (i = 0; i < fix.length; i++) {
        fix[i].style[$mdEffects.TRANSFORM] = fixRotation;
      }
    });
  }

  function clamp(value) {
    if (value > 100) {
      return 100;
    }

    if (value < 0) {
      return 0;
    }

    return Math.ceil(value || 0);
  }
}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.progressLinear
 * @description Linear Progress module!
 */
angular.module('material.components.progressLinear', [
  'material.animations',
  'material.services.theming',
  'material.services.aria'
])
.directive('mdProgressLinear', [
  '$$rAF', 
  '$mdEffects',
  '$mdTheming',
  MdProgressLinearDirective
]);

/**
 * @ngdoc directive
 * @name mdProgressLinear
 * @module material.components.progressLinear
 * @restrict E
 *
 * @description
 * The linear progress directive is used to make loading content in your app as delightful and painless as possible by minimizing the amount of visual change a user sees before they can view and interact with content. Each operation should only be represented by one activity indicator—for example, one refresh operation should not display both a refresh bar and an activity circle.
 *
 * For operations where the percentage of the operation completed can be determined, use a determinate indicator. They give users a quick sense of how long an operation will take.
 *
 * For operations where the user is asked to wait a moment while something finishes up, and it’s not necessary to expose what's happening behind the scenes and how long it will take, use an indeterminate indicator.
 *
 * @param {string} mode Select from one of four modes: determinate, indeterminate, buffer or query.
 * @param {number=} value In determinate and buffer modes, this number represents the percentage of the primary progress bar. Default: 0
 * @param {number=} secondaryValue In the buffer mode, this number represents the precentage of the secondary progress bar. Default: 0
 *
 * @usage
 * <hljs lang="html">
 * <md-progress-linear mode="determinate" value="..."></md-progress-linear>
 *
 * <md-progress-linear mode="determinate" ng-value="..."></md-progress-linear>
 *
 * <md-progress-linear mode="indeterminate"></md-progress-linear>
 *
 * <md-progress-linear mode="buffer" value="..." secondaryValue="..."></md-progress-linear>
 *
 * <md-progress-linear mode="query"></md-progress-linear>
 * </hljs>
 */
function MdProgressLinearDirective($$rAF, $mdEffects, $mdTheming) {

  return {
    restrict: 'E',
    template: '<div class="md-container">' +
      '<div class="md-dashed"></div>' +
      '<div class="md-bar md-bar1"></div>' +
      '<div class="md-bar md-bar2"></div>' +
      '</div>',
    compile: compile
  };
  
  function compile(tElement, tAttrs, transclude) {
    tElement.attr('aria-valuemin', 0);
    tElement.attr('aria-valuemax', 100);
    tElement.attr('role', 'progressbar');

    return postLink;
  }
  function postLink(scope, element, attr) {
    $mdTheming(element);
    var bar1Style = element[0].querySelector('.md-bar1').style,
      bar2Style = element[0].querySelector('.md-bar2').style,
      container = angular.element(element[0].querySelector('.md-container'));

    attr.$observe('value', function(value) {
      if (attr.mode == 'query') {
        return;
      }

      var clamped = clamp(value);
      element.attr('aria-valuenow', clamped);
      bar2Style[$mdEffects.TRANSFORM] = progressLinearTransforms[clamped];
    });

    attr.$observe('secondaryvalue', function(value) {
      bar1Style[$mdEffects.TRANSFORM] = progressLinearTransforms[clamp(value)];
    });

    $$rAF(function() {
      container.addClass('md-ready');
    });
  }

  function clamp(value) {
    if (value > 100) {
      return 100;
    }

    if (value < 0) {
      return 0;
    }

    return Math.ceil(value || 0);
  }
}


// **********************************************************
// Private Methods
// **********************************************************
var progressLinearTransforms = (function() {
  var values = new Array(101);
  for(var i = 0; i < 101; i++){
    values[i] = makeTransform(i);
  }

  return values;

  function makeTransform(value){
    var scale = value/100;
    var translateX = (value-100)/2;
    return 'translateX(' + translateX.toString() + '%) scale(' + scale.toString() + ', 1)';
  }
})();
})();

(function() {

/**
 * @ngdoc module
 * @name material.components.radioButton
 * @description radioButton module!
 */
angular.module('material.components.radioButton', [
  'material.core',
  'material.animations',
  'material.services.aria',
  'material.services.theming'
])
  .directive('mdRadioGroup', [
    '$mdUtil',
    '$mdConstant',
    '$mdTheming',
    mdRadioGroupDirective
  ])
  .directive('mdRadioButton', [
    '$mdAria',
    '$mdUtil',
    '$mdTheming',
    mdRadioButtonDirective
  ]);

/**
 * @ngdoc directive
 * @module material.components.radioButton
 * @name mdRadioGroup
 *
 * @restrict E
 *
 * @description
 * The `<md-radio-group>` directive identifies a grouping
 * container for the 1..n grouped radio buttons; specified using nested
 * `<md-radio-button>` tags.
 *
 * @param {string} ngModel Assignable angular expression to data-bind to.
 * @param {boolean=} noink Use of attribute indicates flag to disable ink ripple effects.
 *
 * @usage
 * <hljs lang="html">
 * <md-radio-group ng-model="selected">
 *
 *   <md-radio-button
 *        ng-repeat="d in colorOptions"
 *        ng-value="d.value" aria-label="{{ d.label }}">
 *
 *          {{ d.label }}
 *
 *   </md-radio-button>
 *
 * </md-radio-group>
 * </hljs>
 *
 */
function mdRadioGroupDirective($mdUtil, $mdConstant, $mdTheming) {
  RadioGroupController.prototype = createRadioGroupControllerProto();

  return {
    restrict: 'E',
    controller: ['$element', RadioGroupController],
    require: ['mdRadioGroup', '?ngModel'],
    link: link
  };

  function link(scope, element, attr, ctrls) {
    $mdTheming(element);
    var rgCtrl = ctrls[0],
      ngModelCtrl = ctrls[1] || {
        $setViewValue: angular.noop
      };

    function keydownListener(ev) {
      if (ev.keyCode === $mdConstant.KEY_CODE.LEFT_ARROW || ev.keyCode === $mdConstant.KEY_CODE.UP_ARROW) {
        ev.preventDefault();
        rgCtrl.selectPrevious();
      }
      else if (ev.keyCode === $mdConstant.KEY_CODE.RIGHT_ARROW || ev.keyCode === $mdConstant.KEY_CODE.DOWN_ARROW) {
        ev.preventDefault();
        rgCtrl.selectNext();
      }
    }

    rgCtrl.init(ngModelCtrl);

    element.attr({
      'role': 'radiogroup',
      'tabIndex': '0'
    })
    .on('keydown', keydownListener);
  }

  function RadioGroupController($element) {
    this._radioButtonRenderFns = [];
    this.$element = $element;
  }

  function createRadioGroupControllerProto() {
    return {
      init: function(ngModelCtrl) {
        this._ngModelCtrl = ngModelCtrl;
        this._ngModelCtrl.$render = angular.bind(this, this.render);
      },
      add: function(rbRender) {
        this._radioButtonRenderFns.push(rbRender);
      },
      remove: function(rbRender) {
        var index = this._radioButtonRenderFns.indexOf(rbRender);
        if (index !== -1) {
          this._radioButtonRenderFns.splice(index, 1);
        }
      },
      render: function() {
        this._radioButtonRenderFns.forEach(function(rbRender) {
          rbRender();
        });
      },
      setViewValue: function(value, eventType) {
        this._ngModelCtrl.$setViewValue(value, eventType);
        // update the other radio buttons as well
        this.render();
      },
      getViewValue: function() {
        return this._ngModelCtrl.$viewValue;
      },
      selectNext: function() {
        return changeSelectedButton(this.$element, 1);
      },
      selectPrevious : function() {
        return changeSelectedButton(this.$element, -1);
      },
      setActiveDescendant: function (radioId) {
        this.$element.attr('aria-activedescendant', radioId);
      }
    };
  }
  /**
   * Change the radio group's selected button by a given increment.
   * If no button is selected, select the first button.
   */
  function changeSelectedButton(parent, increment) {
    // Coerce all child radio buttons into an array, then wrap then in an iterator
    var buttons = $mdUtil.iterator(
      Array.prototype.slice.call(parent[0].querySelectorAll('md-radio-button')),
      true
    );

    if (buttons.count()) {
      var selected = parent[0].querySelector('md-radio-button.md-checked');
      var target = buttons[increment < 0 ? 'previous' : 'next'](selected) || buttons.first();
      // Activate radioButton's click listener (triggerHandler won't create a real click event)
      angular.element(target).triggerHandler('click');
    }
  }

}

/**
 * @ngdoc directive
 * @module material.components.radioButton
 * @name mdRadioButton
 *
 * @restrict E
 *
 * @description
 * The `<md-radio-button>`directive is the child directive required to be used within `<md-radioo-group>` elements.
 *
 * While similar to the `<input type="radio" ng-model="" value="">` directive,
 * the `<md-radio-button>` directive provides ink effects, ARIA support, and
 * supports use within named radio groups.
 *
 * @param {string} ngModel Assignable angular expression to data-bind to.
 * @param {string=} ngChange Angular expression to be executed when input changes due to user
 *    interaction with the input element.
 * @param {string} ngValue Angular expression which sets the value to which the expression should
 *    be set when selected.*
 * @param {string} value The value to which the expression should be set when selected.
 * @param {string=} name Property name of the form under which the control is published.
 * @param {string=} ariaLabel Publish the button label used by screen-readers for accessibility. Defaults to the radio button's text.
 *
 * @usage
 * <hljs lang="html">
 *
 * <md-radio-button value="1" aria-label="Label 1">
 *   Label 1
 * </md-radio-button>
 *
 * <md-radio-button ng-model="color" ng-value="specialValue" aria-label="Green">
 *   Green
 * </md-radio-button>
 *
 * </hljs>
 *
 */
function mdRadioButtonDirective($mdAria, $mdUtil, $mdTheming) {

  var CHECKED_CSS = 'md-checked';

  return {
    restrict: 'E',
    require: '^mdRadioGroup',
    transclude: true,
    template: '<div class="md-container" ink-ripple="checkbox">' +
                '<div class="md-off"></div>' +
                '<div class="md-on"></div>' +
              '</div>' +
              '<div ng-transclude class="md-label"></div>',
    link: link
  };

  function link(scope, element, attr, rgCtrl) {
    var lastChecked;

    $mdTheming(element);
    configureAria(element, scope);

    rgCtrl.add(render);
    attr.$observe('value', render);

    element
      .on('click', listener)
      .on('$destroy', function() {
        rgCtrl.remove(render);
      });

    function listener(ev) {
      if (element[0].hasAttribute('disabled')) return;

      scope.$apply(function() {
        rgCtrl.setViewValue(attr.value, ev && ev.type);
      });
    }

    function render() {
      var checked = (rgCtrl.getViewValue() === attr.value);
      if (checked === lastChecked) {
        return;
      }
      lastChecked = checked;
      element.attr('aria-checked', checked);
      if (checked) {
        element.addClass(CHECKED_CSS);
        rgCtrl.setActiveDescendant(element.attr('id'));
      } else {
        element.removeClass(CHECKED_CSS);
      }
    }
    /**
     * Inject ARIA-specific attributes appropriate for each radio button
     */
    function configureAria( element, scope ){
      scope.ariaId = buildAriaID();

      element.attr({
        'id' :  scope.ariaId,
        'role' : 'radio',
        'aria-checked' : 'false'
      });

      $mdAria.expectWithText(element, 'aria-label');

      /**
       * Build a unique ID for each radio button that will be used with aria-activedescendant.
       * Preserve existing ID if already specified.
       * @returns {*|string}
       */
      function buildAriaID() {
        return attr.id || ( 'radio' + "_" + $mdUtil.nextUid() );
      }
    }
  }
}


})();

(function() {
/**
 * @ngdoc module
 * @name material.components.sidenav
 *
 * @description
 * A Sidenav QP component.
 */
angular.module('material.components.sidenav', [
  'material.core',
  'material.services.registry',
  'material.services.media',
  'material.components.backdrop',
  'material.services.theming',
  'material.animations'
])
  .factory('$mdSidenav', [
    '$mdComponentRegistry', 
    mdSidenavService 
  ])
  .directive('mdSidenav', [
    '$timeout',
    '$animate',
    '$parse',
    '$mdMedia',
    '$mdConstant',
    '$compile',
    '$mdTheming',
    mdSidenavDirective 
  ])
  .controller('$mdSidenavController', [
    '$scope',
    '$element',
    '$attrs',
    '$timeout',
    '$mdSidenav',
    '$mdComponentRegistry',
    mdSidenavController 
  ]);
  
/*
 * @private
 * @ngdoc object
 * @name mdSidenavController
 * @module material.components.sidenav
 *
 * @description
 * The controller for mdSidenav components.
 */
function mdSidenavController($scope, $element, $attrs, $timeout, $mdSidenav, $mdComponentRegistry) {

  var self = this;

  this.destroy = $mdComponentRegistry.register(this, $attrs.componentId);

  this.isOpen = function() {
    return !!$scope.isOpen;
  };
  this.toggle = function() {
    $scope.isOpen = !$scope.isOpen;
  };
  this.open = function() {
    $scope.isOpen = true;
  };
  this.close = function() {
    $scope.isOpen = false;
  };
}

/*
 * @private
 * @ngdoc service
 * @name $mdSidenav
 * @module material.components.sidenav
 *
 * @description
 * $mdSidenav makes it easy to interact with multiple sidenavs
 * in an app.
 *
 * @usage
 *
 * ```javascript
 * // Toggle the given sidenav
 * $mdSidenav(componentId).toggle();
 *
 * // Open the given sidenav
 * $mdSidenav(componentId).open();
 *
 * // Close the given sidenav
 * $mdSidenav(componentId).close();
 * ```
 */
function mdSidenavService($mdComponentRegistry) {
  return function(handle) {
    var instance = $mdComponentRegistry.get(handle);
    if(!instance) {
      $mdComponentRegistry.notFoundError(handle);
    }

    return {
      isOpen: function() {
        return instance && instance.isOpen();
      },
      toggle: function() {
        instance && instance.toggle();
      },
      open: function() {
        instance && instance.open();
      },
      close: function() {
        instance && instance.close();
      }
    };
  };
}

/**
 * @ngdoc directive
 * @name mdSidenav
 * @module material.components.sidenav
 * @restrict E
 *
 * @description
 *
 * A Sidenav component that can be opened and closed programatically.
 *
 * By default, upon opening it will slide out on top of the main content area.
 *
 * @usage
 * <hljs lang="html">
 * <div layout="horizontal" ng-controller="MyController">
 *   <md-sidenav component-id="left" class="md-sidenav-left">
 *     Left Nav!
 *   </md-sidenav>
 *
 *   <md-content>
 *     Center Content
 *     <md-button ng-click="openLeftMenu()">
 *       Open Left Menu
 *     </md-button>
 *   </md-content>
 *
 *   <md-sidenav component-id="right" 
 *     is-locked-open="$media('min-width: 333px')"
 *     class="md-sidenav-right">
 *     Right Nav!
 *   </md-sidenav>
 * </div>
 * </hljs>
 *
 * <hljs lang="js">
 * var app = angular.module('myApp', ['ngMaterial']);
 * app.controller('MyController', function($scope, $mdSidenav) {
 *   $scope.openLeftMenu = function() {
 *     $mdSidenav('left').toggle();
 *   };
 * });
 * </hljs>
 *
 * @param {expression=} is-open A model bound to whether the sidenav is opened.
 * @param {string=} component-id componentId to use with $mdSidenav service.
 * @param {expression=} is-locked-open When this expression evalutes to true,
 * the sidenav 'locks open': it falls into the content's flow instead
 * of appearing over it. This overrides the `is-open` attribute.
 *
 * A $media() function is exposed to the is-locked-open attribute, which
 * can be given a media query or one of the `sm`, `md` or `lg` presets.
 * Examples:
 *
 *   - `<md-sidenav is-locked-open="shouldLockOpen"></md-sidenav>`
 *   - `<md-sidenav is-locked-open="$media('min-width: 1000px')"></md-sidenav>`
 *   - `<md-sidenav is-locked-open="$media('sm')"></md-sidenav>` <!-- locks open on small screens !-->
 */
function mdSidenavDirective($timeout, $animate, $parse, $mdMedia, $mdConstant, $compile, $mdTheming) {
  return {
    restrict: 'E',
    scope: {
      isOpen: '=?'
    },
    controller: '$mdSidenavController',
    compile: function(element) {
      element.addClass('md-closed');
      element.attr('tabIndex', '-1');
      return postLink;
    }
  };

  function postLink(scope, element, attr, sidenavCtrl) {
    var isLockedOpenParsed = $parse(attr.isLockedOpen);
    var backdrop = $compile(
      '<md-backdrop class="md-sidenav-backdrop md-opaque">'
    )(scope);

    $mdTheming.inherit(backdrop, element);

    element.on('$destroy', sidenavCtrl.destroy);

    scope.$watch('isOpen', setOpen);
    scope.$watch(function() {
      return isLockedOpenParsed(scope.$parent, {
        $media: $mdMedia
      });
    }, function(isLocked) {
      element.toggleClass('md-locked-open', !!isLocked);
      backdrop.toggleClass('md-locked-open', !!isLocked);
    });

    /**
     * Toggle the SideNav view and attach/detach listeners
     * @param isOpen
     */
    function setOpen(isOpen) {
      var parent = element.parent();

      parent[isOpen ? 'on' : 'off']('keydown', onKeyDown);
      $animate[isOpen ? 'enter' : 'leave'](backdrop, parent);
      backdrop[isOpen ? 'on' : 'off']('click', close);

      $animate[isOpen ? 'removeClass' : 'addClass'](element, 'md-closed').then(function() {
        // If we opened, and haven't closed again before the animation finished
        if (scope.isOpen) {
          element.focus();
        }
      });
    }

    /**
     * Auto-close sideNav when the `escape` key is pressed.
     * @param evt
     */
    function onKeyDown(ev) {
      if (ev.keyCode === $mdConstant.KEY_CODE.ESCAPE) {
        close();
        ev.preventDefault();
        ev.stopPropagation();
      }
    }

    /**
     * With backdrop `clicks` or `escape` key-press, immediately
     * apply the CSS close transition... Then notify the controller
     * to close() and perform its own actions.
     */
    function close() {
      $timeout(function(){
        sidenavCtrl.close();
      });
    }

  }

}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.slider
 */
angular.module('material.components.slider', [
  'material.core',
  'material.animations',
  'material.services.aria',
  'material.services.theming'
])
.directive('mdSlider', [
  '$mdTheming',
  SliderDirective
]);

/**
 * @ngdoc directive
 * @name mdSlider
 * @module material.components.slider
 * @restrict E
 * @description
 * The `<md-slider>` component allows the user to choose from a range of
 * values.
 *
 * It has two modes: 'normal' mode, where the user slides between a wide range
 * of values, and 'discrete' mode, where the user slides between only a few
 * select values.
 *
 * To enable discrete mode, add the `discrete` attribute to a slider,
 * and use the `step` attribute to change the distance between
 * values the user is allowed to pick.
 *
 * @usage
 * <h4>Normal Mode</h4>
 * <hljs lang="html">
 * <md-slider ng-model="myValue" min="5" max="500">
 * </md-slider>
 * </hljs>
 * <h4>Discrete Mode</h4>
 * <hljs lang="html">
 * <md-slider discrete ng-model="myDiscreteValue" step="10" min="10" max="130">
 * </md-slider>
 * </hljs>
 *
 * @param {boolean=} discrete Whether to enable discrete mode.
 * @param {number=} step The distance between values the user is allowed to pick. Default 1.
 * @param {number=} min The minimum value the user is allowed to pick. Default 0.
 * @param {number=} max The maximum value the user is allowed to pick. Default 100.
 */
function SliderDirective($mdTheming) {
  return {
    scope: {},
    require: ['?ngModel', 'mdSlider'],
    controller: [
      '$scope',
      '$element',
      '$attrs',
      '$$rAF',
      '$window',
      '$mdEffects',
      '$mdAria',
      '$mdUtil',
      '$mdConstant',
      SliderController
    ],
    template:
      '<div class="md-track-container">' +
        '<div class="md-track"></div>' +
        '<div class="md-track md-track-fill"></div>' +
        '<div class="md-track-ticks"></div>' +
      '</div>' +
      '<div class="md-thumb-container">' +
        '<div class="md-thumb"></div>' +
        '<div class="md-focus-thumb"></div>' +
        '<div class="md-focus-ring"></div>' +
        '<div class="md-sign">' +
          '<span class="md-thumb-text" ng-bind="modelValue"></span>' +
        '</div>' +
        '<div class="md-disabled-thumb"></div>' +
      '</div>',
    link: postLink
  };

  function postLink(scope, element, attr, ctrls) {
    $mdTheming(element);
    var ngModelCtrl = ctrls[0] || {
      // Mock ngModelController if it doesn't exist to give us
      // the minimum functionality needed
      $setViewValue: function(val) {
        this.$viewValue = val;
        this.$viewChangeListeners.forEach(function(cb) { cb(); });
      },
      $parsers: [],
      $formatters: [],
      $viewChangeListeners: []
    };

    var sliderCtrl = ctrls[1];
    sliderCtrl.init(ngModelCtrl);
  }
}

/**
 * We use a controller for all the logic so that we can expose a few
 * things to unit tests
 */
function SliderController(scope, element, attr, $$rAF, $window, $mdEffects, $mdAria, $mdUtil, $mdConstant) {

  this.init = function init(ngModelCtrl) {
    var thumb = angular.element(element[0].querySelector('.md-thumb'));
    var thumbContainer = thumb.parent();
    var trackContainer = angular.element(element[0].querySelector('.md-track-container'));
    var activeTrack = angular.element(element[0].querySelector('.md-track-fill'));
    var tickContainer = angular.element(element[0].querySelector('.md-track-ticks'));
    var throttledRefreshDimensions = $mdUtil.throttle(refreshSliderDimensions, 5000);

    // Default values, overridable by attrs
    attr.min ? attr.$observe('min', updateMin) : updateMin(0);
    attr.max ? attr.$observe('max', updateMax) : updateMax(100);
    attr.step ? attr.$observe('step', updateStep) : updateStep(1);

    // We have to manually stop the $watch on ngDisabled because it exists
    // on the parent scope, and won't be automatically destroyed when
    // the component is destroyed.
    var stopDisabledWatch = angular.noop;
    if (attr.ngDisabled) {
      stopDisabledWatch = scope.$parent.$watch(attr.ngDisabled, updateAriaDisabled);
    } else {
      updateAriaDisabled(!!attr.disabled);
    }

    $mdAria.expect(element, 'aria-label');

    element.attr('tabIndex', 0);
    element.attr('role', 'slider');
    element.on('keydown', keydownListener);

    var hammertime = new Hammer(element[0], {
      recognizers: [
        [Hammer.Pan, { direction: Hammer.DIRECTION_HORIZONTAL }]
      ]
    });
    hammertime.on('hammer.input', onInput);
    hammertime.on('panstart', onPanStart);
    hammertime.on('pan', onPan);
    hammertime.on('panend', onPanEnd);

    // On resize, recalculate the slider's dimensions and re-render
    function updateAll() {
      refreshSliderDimensions();
      ngModelRender();
      redrawTicks();
    }
    setTimeout(updateAll);

    var debouncedUpdateAll = $$rAF.debounce(updateAll);
    angular.element($window).on('resize', debouncedUpdateAll);

    scope.$on('$destroy', function() {
      angular.element($window).off('resize', debouncedUpdateAll);
      hammertime.destroy();
      stopDisabledWatch();
    });

    ngModelCtrl.$render = ngModelRender;
    ngModelCtrl.$viewChangeListeners.push(ngModelRender);
    ngModelCtrl.$formatters.push(minMaxValidator);
    ngModelCtrl.$formatters.push(stepValidator);

    /**
     * Attributes
     */
    var min;
    var max;
    var step;
    function updateMin(value) {
      min = parseFloat(value);
      element.attr('aria-valuemin', value);
    }
    function updateMax(value) {
      max = parseFloat(value);
      element.attr('aria-valuemax', value);
    }
    function updateStep(value) {
      step = parseFloat(value);
      redrawTicks();
    }
    function updateAriaDisabled(isDisabled) {
      element.attr('aria-disabled', !!isDisabled);
    }

    // Draw the ticks with canvas.
    // The alternative to drawing ticks with canvas is to draw one element for each tick,
    // which could quickly become a performance bottleneck.
    var tickCanvas, tickCtx;
    function redrawTicks() {
      if (!angular.isDefined(attr.discrete)) return;

      var numSteps = Math.floor( (max - min) / step );
      if (!tickCanvas) {
        tickCanvas = angular.element('<canvas style="position:absolute;">');
        tickCtx = tickCanvas[0].getContext('2d');
        tickCtx.fillStyle = 'black';
        tickContainer.append(tickCanvas);
      }
      var dimensions = getSliderDimensions();
      tickCanvas[0].width = dimensions.width;
      tickCanvas[0].height = dimensions.height;

      var distance;
      for (var i = 0; i <= numSteps; i++) {
        distance = Math.floor(dimensions.width * (i / numSteps));
        tickCtx.fillRect(distance - 1, 0, 2, dimensions.height);
      }
    }


    /**
     * Refreshing Dimensions
     */
    var sliderDimensions = {};
    refreshSliderDimensions();
    function refreshSliderDimensions() {
      sliderDimensions = trackContainer[0].getBoundingClientRect();
    }
    function getSliderDimensions() {
      throttledRefreshDimensions();
      return sliderDimensions;
    }

    /**
     * left/right arrow listener
     */
    function keydownListener(ev) {
      if(element[0].hasAttribute('disabled')) {
        return;
      }

      var changeAmount;
      if (ev.keyCode === $mdConstant.KEY_CODE.LEFT_ARROW) {
        changeAmount = -step;
      } else if (ev.keyCode === $mdConstant.KEY_CODE.RIGHT_ARROW) {
        changeAmount = step;
      }
      if (changeAmount) {
        if (ev.metaKey || ev.ctrlKey || ev.altKey) {
          changeAmount *= 4;
        }
        ev.preventDefault();
        ev.stopPropagation();
        scope.$evalAsync(function() {
          setModelValue(ngModelCtrl.$viewValue + changeAmount);
        });
      }
    }

    /**
     * ngModel setters and validators
     */
    function setModelValue(value) {
      ngModelCtrl.$setViewValue( minMaxValidator(stepValidator(value)) );
    }
    function ngModelRender() {

      if (isNaN(ngModelCtrl.$viewValue)) {
        ngModelCtrl.$viewValue = ngModelCtrl.$modelValue;
      }

      var percent = (ngModelCtrl.$viewValue - min) / (max - min);
      scope.modelValue = ngModelCtrl.$viewValue;
      element.attr('aria-valuenow', ngModelCtrl.$viewValue);
      setSliderPercent(percent);
    }

    function minMaxValidator(value) {
      if (angular.isNumber(value)) {
        return Math.max(min, Math.min(max, value));
      }
    }
    function stepValidator(value) {
      if (angular.isNumber(value)) {
        return Math.round(value / step) * step;
      }
    }

    /**
     * @param percent 0-1
     */
    function setSliderPercent(percent) {
      activeTrack.css('width', (percent * 100) + '%');
      thumbContainer.css(
        $mdEffects.TRANSFORM,
        'translate3d(' + getSliderDimensions().width * percent + 'px,0,0)'
      );
      element.toggleClass('md-min', percent === 0);
    }


    /**
     * Slide listeners
     */
    var isSliding = false;
    var isDiscrete = angular.isDefined(attr.discrete);

    function onInput(ev) {
      if (!isSliding && ev.eventType === Hammer.INPUT_START &&
          !element[0].hasAttribute('disabled')) {

        isSliding = true;

        element.addClass('active');
        element[0].focus();
        refreshSliderDimensions();

        onPan(ev);

        ev.srcEvent.stopPropagation();

      } else if (isSliding && ev.eventType === Hammer.INPUT_END) {

        if ( isSliding && isDiscrete ) onPanEnd(ev);
        isSliding = false;

        element.removeClass('panning active');
      }
    }
    function onPanStart() {
      if (!isSliding) return;
      element.addClass('panning');
    }
    function onPan(ev) {
      if (!isSliding) return;

      // While panning discrete, update only the
      // visual positioning but not the model value.

      if ( isDiscrete ) adjustThumbPosition( ev.center.x );
      else              doSlide( ev.center.x );

      ev.preventDefault();
      ev.srcEvent.stopPropagation();
    }

    function onPanEnd(ev) {
      if ( isDiscrete && !element[0].hasAttribute('disabled') ) {
        // Convert exact to closest discrete value.
        // Slide animate the thumb... and then update the model value.

        var exactVal = percentToValue( positionToPercent( ev.center.x ));
        var closestVal = minMaxValidator( stepValidator(exactVal) );

        setSliderPercent( valueToPercent(closestVal));
        $$rAF(function(){
          setModelValue( closestVal );
        });

        ev.preventDefault();
        ev.srcEvent.stopPropagation();
      }
    }

    /**
     * Expose for testing
     */
    this._onInput = onInput;
    this._onPanStart = onPanStart;
    this._onPan = onPan;

    /**
     * Slide the UI by changing the model value
     * @param x
     */
    function doSlide( x ) {
      scope.$evalAsync( function() {
        setModelValue( percentToValue( positionToPercent(x) ));
      });
    }

    /**
     * Slide the UI without changing the model (while dragging/panning)
     * @param x
     */
    function adjustThumbPosition( x ) {
      setSliderPercent( positionToPercent(x) );
    }

    /**
     * Convert horizontal position on slider to percentage value of offset from beginning...
     * @param x
     * @returns {number}
     */
    function positionToPercent( x ) {
      return Math.max(0, Math.min(1, (x - sliderDimensions.left) / (sliderDimensions.width)));
    }

    /**
     * Convert percentage offset on slide to equivalent model value
     * @param percent
     * @returns {*}
     */
    function percentToValue( percent ) {
      return (min + percent * (max - min));
    }

    function valueToPercent( val ) {
      return (val - min)/(max - min);
    }

  };
}
})();

(function() {
/*
 * @ngdoc module
 * @name material.components.sticky
 * @description
 *
 * Sticky effects for md
 */

angular.module('material.components.sticky', [
  'material.core',
  'material.components.content',
  'material.animations'
])
.factory('$mdSticky', [
  '$document',
  '$mdEffects',
  '$compile',
  '$$rAF',
  '$mdUtil',
  MdSticky
]);

/*
 * @ngdoc service
 * @name $mdSticky
 * @module material.components.sticky
 *
 * @description
 * The `$mdSticky`service provides a mixin to make elements sticky.
 *
 * @returns A `$mdSticky` function that takes three arguments:
 *   - `scope`
 *   - `element`: The element that will be 'sticky'
 *   - `elementClone`: A clone of the element, that will be shown
 *     when the user starts scrolling past the original element.
 *     If not provided, it will use the result of `element.clone()`.
 */

function MdSticky($document, $mdEffects, $compile, $$rAF, $mdUtil) {

  var browserStickySupport = checkStickySupport();

  /**
   * Registers an element as sticky, used internally by directives to register themselves
   */
  return function registerStickyElement(scope, element, stickyClone) {
    var contentCtrl = element.controller('mdContent');
    if (!contentCtrl) return;

    if (browserStickySupport) {
      element.css({
        position: browserStickySupport,
        top: 0,
        'z-index': 2
      });
    } else {
      var $$sticky = contentCtrl.$element.data('$$sticky');
      if (!$$sticky) {
        $$sticky = setupSticky(contentCtrl);
        contentCtrl.$element.data('$$sticky', $$sticky);
      }

      var deregister = $$sticky.add(element, stickyClone || element.clone());
      scope.$on('$destroy', deregister);
    }
  };

  function setupSticky(contentCtrl) {
    var contentEl = contentCtrl.$element;

    // Refresh elements is very expensive, so we use the debounced
    // version when possible.
    var debouncedRefreshElements = $$rAF.debounce(refreshElements);

    // setupAugmentedScrollEvents gives us `$scrollstart` and `$scroll`,
    // more reliable than `scroll` on android.
    setupAugmentedScrollEvents(contentEl);
    contentEl.on('$scrollstart', debouncedRefreshElements);
    contentEl.on('$scroll', onScroll);

    var self;
    return self = {
      prev: null,
      current: null, //the currently stickied item
      next: null,
      items: [],
      add: add,
      refreshElements: refreshElements
    };

    /***************
     * Public
     ***************/
    // Add an element and its sticky clone to this content's sticky collection
    function add(element, stickyClone) {
      stickyClone.addClass('md-sticky-clone');

      var item = {
        element: element,
        clone: stickyClone
      };
      self.items.push(item);

      contentEl.parent().prepend(item.clone);

      debouncedRefreshElements();

      return function remove() {
        self.items.forEach(function(item, index) {
          if (item.element[0] === element[0]) {
            self.items.splice(index, 1);
            item.clone.remove();
          }
        });
        debouncedRefreshElements();
      };
    }

    function refreshElements() {
      var contentRect = contentEl[0].getBoundingClientRect();


      // Sort our collection of elements by their current position in the DOM.
      // We need to do this because our elements' order of being added may not
      // be the same as their order of display.
      self.items.forEach(refreshPosition);
      self.items = self.items.sort(function(a, b) {
        return a.top < b.top ? -1 : 1;
      });

      // Find which item in the list should be active, 
      // based upon the content's current scroll position
      var item;
      var currentScrollTop = contentEl.prop('scrollTop');
      for (var i = self.items.length - 1; i >= 0; i--) {
        if (currentScrollTop > self.items[i].top) {
          item = self.items[i];
          break;
        }
      }
      setCurrentItem(item);
    }


    /***************
     * Private
     ***************/

    // Find the `top` of an item relative to the content element,
    // and also the height.
    function refreshPosition(item) {
      // Find the top of an item by adding to the offsetHeight until we reach the 
      // content element.
      var current = item.element[0];
      item.top = 0;
      item.left = 0;
      while (current && current !== contentEl[0]) {
        item.top += current.offsetTop;
        item.left += current.offsetLeft;
        current = current.offsetParent;
      }
      item.height = item.element.prop('offsetHeight');
      item.clone.css('margin-left', item.left + 'px');
    }


    // As we scroll, push in and select the correct sticky element.
    function onScroll() {
      var scrollTop = contentEl.prop('scrollTop');
      var isScrollingDown = scrollTop > (onScroll.prevScrollTop || 0);
      onScroll.prevScrollTop = scrollTop;

      // At the top?
      if (scrollTop === 0) {
        setCurrentItem(null);

      // Going to next item?
      } else if (isScrollingDown && self.next) {
        if (self.next.top - scrollTop <= 0) {
          // Sticky the next item if we've scrolled past its position.
          setCurrentItem(self.next);
        } else if (self.current) {
          // Push the current item up when we're almost at the next item.
          if (self.next.top - scrollTop <= self.next.height) {
            translate(self.current, self.next.top - self.next.height - scrollTop);
          } else {
            translate(self.current, null);
          }
        }
        
      // Scrolling up with a current sticky item?
      } else if (!isScrollingDown && self.current) {
        if (scrollTop < self.current.top) {
          // Sticky the previous item if we've scrolled up past
          // the original position of the currently stickied item.
          setCurrentItem(self.prev);
        }
        // Scrolling up, and just bumping into the item above (just set to current)?
        // If we have a next item bumping into the current item, translate
        // the current item up from the top as it scrolls into view.
        if (self.current && self.next) {
          if (scrollTop >= self.next.top - self.current.height) {
            translate(self.current, self.next.top - scrollTop - self.current.height);
          } else {
            translate(self.current, null);
          }
        }
      }
    }
     
   function setCurrentItem(item) {
     if (self.current === item) return;
     // Deactivate currently active item
     if (self.current) {
       translate(self.current, null);
       setStickyState(self.current, null);
     }

     // Activate new item if given
     if (item) {
       setStickyState(item, 'active');
     }

     self.current = item;
     var index = self.items.indexOf(item);
     // If index === -1, index + 1 = 0. It works out.
     self.next = self.items[index + 1];
     self.prev = self.items[index - 1];
     setStickyState(self.next, 'next');
     setStickyState(self.prev, 'prev');
   }

   function setStickyState(item, state) {
     if (!item || item.state === state) return;
     if (item.state) {
       item.clone.attr('sticky-prev-state', item.state);
       item.element.attr('sticky-prev-state', item.state);
     }
     item.clone.attr('sticky-state', state);
     item.element.attr('sticky-state', state);
     item.state = state;
   }

   function translate(item, amount) {
     if (!item) return;
     if (amount === null || amount === undefined) {
       if (item.translateY) {
         item.translateY = null;
         item.clone.css($mdEffects.TRANSFORM, '');
       }
     } else {
       item.translateY = amount;
       item.clone.css(
         $mdEffects.TRANSFORM, 
         'translate3d(' + item.left + 'px,' + amount + 'px,0)'
       );
     }
   }
  }

  // Function to check for browser sticky support
  function checkStickySupport($el) {
    var stickyProp;
    var testEl = angular.element('<div>');
    $document[0].body.appendChild(testEl[0]);

    var stickyProps = ['sticky', '-webkit-sticky'];
    for (var i = 0; i < stickyProps.length; ++i) {
      testEl.css({position: stickyProps[i], top: 0, 'z-index': 2});
      if (testEl.css('position') == stickyProps[i]) {
        stickyProp = stickyProps[i];
        break;
      }
    }
    testEl.remove();
    return stickyProp;
  }

  // Android 4.4 don't accurately give scroll events.
  // To fix this problem, we setup a fake scroll event. We say:
  // > If a scroll or touchmove event has happened in the last DELAY milliseconds, 
  //   then send a `$scroll` event every animationFrame.
  // Additionally, we add $scrollstart and $scrollend events.
  function setupAugmentedScrollEvents(element) {
    var SCROLL_END_DELAY = 200;
    var isScrolling;
    var lastScrollTime;
    element.on('scroll touchmove', function() {
      if (!isScrolling) {
        isScrolling = true;
        $$rAF(loopScrollEvent);
        element.triggerHandler('$scrollstart');
      }
      element.triggerHandler('$scroll');
      lastScrollTime = +$mdUtil.now();
    });

    function loopScrollEvent() {
      if (+$mdUtil.now() - lastScrollTime > SCROLL_END_DELAY) {
        isScrolling = false;
        element.triggerHandler('$scrollend');
      } else {
        element.triggerHandler('$scroll');
        $$rAF(loopScrollEvent);
      }
    }
  }

}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.subheader
 * @description
 * SubHeader module
 */
angular.module('material.components.subheader', [
  'material.components.sticky',
  'material.services.theming'
])
.directive('mdSubheader', [
  '$mdSticky',
  '$compile',
  '$mdTheming',
  MdSubheaderDirective
]);

/**
 * @ngdoc directive
 * @name mdSubheader
 * @module material.components.subheader
 *
 * @restrict E
 *
 * @description
 * The `<md-subheader>` directive is a subheader for a section
 *
 * @usage
 * <hljs lang="html">
 * <md-subheader>Online Friends</md-subheader>
 * </hljs>
 */

function MdSubheaderDirective($mdSticky, $compile, $mdTheming) {
  return {
    restrict: 'E',
    replace: true,
    transclude: true,
    template: 
      '<h2 class="md-subheader">' +
        '<span class="md-subheader-content"></span>' +
      '</h2>',
    compile: function(element, attr, transclude) {
      var outerHTML = element[0].outerHTML;
      return function postLink(scope, element, attr) {
        $mdTheming(element);
        function getContent(el) {
          return angular.element(el[0].querySelector('.md-subheader-content'));
        }

        // Transclude the user-given contents of the subheader
        // the conventional way.
        transclude(scope, function(clone) {
          getContent(element).append(clone);
        });

        // Create another clone, that uses the outer and inner contents
        // of the element, that will be 'stickied' as the user scrolls.
        transclude(scope, function(clone) {
          var stickyClone = $compile(angular.element(outerHTML))(scope);
          $mdTheming(stickyClone);
          getContent(stickyClone).append(clone);
          $mdSticky(scope, element, stickyClone);
        });
      };
    }
  };
}
})();

(function() {
(function() {

  /**
   * @ngdoc module
   * @name material.components.swipe
   * @description Swipe module!
   */
  angular.module('material.components.swipe',['ng'])

    /*
     * @ngdoc service
     * @module material.components.swipe
     * @name $mdSwipe
     * @description
     * This service allows directives to easily attach swipe and pan listeners to
     * the specified element.
     */
    .factory("$mdSwipe", function() {

      // match expected API functionality
      var attachNoop = function(){ return angular.noop; };

      /**
       * SwipeService constructor pre-captures scope and customized event types
       *
       * @param scope
       * @param eventTypes
       * @returns {*}
       * @constructor
       */
      return function SwipeService(scope, eventTypes) {
        if ( !eventTypes ) eventTypes = "swipeleft swiperight";

        // publish configureFor() method for specific element instance
        return function configureFor(element, onSwipeCallback, attachLater ) {
          var hammertime = new Hammer(element[0], {
            recognizers : addRecognizers([], eventTypes )
          });

          // Attach swipe listeners now
          if ( !attachLater ) attachSwipe();

          // auto-disconnect during destroy
          scope.$on('$destroy', function() {
            hammertime.destroy();
          });

          return attachSwipe;

          // **********************
          // Internal methods
          // **********************

          /**
           * Delegate swipe event to callback function
           * and ensure $digest is triggered.
           *
           * @param ev HammerEvent
           */
          function swipeHandler(ev) {

            // Prevent triggering parent hammer listeners
            ev.srcEvent.stopPropagation();

            if ( angular.isFunction(onSwipeCallback) ) {
              scope.$apply(function() {
                onSwipeCallback(ev);
              });
            }
          }

          /**
           * Enable listeners and return detach() fn
           */
          function attachSwipe() {
            hammertime.on(eventTypes, swipeHandler );

            return function detachSwipe() {
              hammertime.off( eventTypes );
            };
          }

          /**
           * Add optional recognizers such as panleft, panright
           */
          function addRecognizers(list, events) {
            var hasPanning = (events.indexOf("pan") > -1);
            var hasSwipe   = (events.indexOf("swipe") > -1);

            if (hasPanning) {
              list.push([ Hammer.Pan, { direction: Hammer.DIRECTION_HORIZONTAL } ]);
            }
            if (hasSwipe) {
              list.push([ Hammer.Swipe, { direction: Hammer.DIRECTION_HORIZONTAL } ]);
            }

            return list;
          }

        };
      };
    })

    /**
     * @ngdoc directive
     * @module material.components.swipe
     * @name mdSwipeLeft
     *
     * @restrict A
     *
     * @description
     * The `<div  md-swipe-left="expression">` directive identifies an element on which
     * HammerJS horizontal swipe left and pan left support will be active. The swipe/pan action
     * can result in custom activity trigger by evaluating `expression`.
     *
     * @param {boolean=} noPan Use of attribute indicates flag to disable detection of `panleft` activity
     *
     * @usage
     * <hljs lang="html">
     *
     * <div class="animate-switch-container"
     *      ng-switch on="data.selectedIndex"
     *      md-swipe-left="data.selectedIndex+=1;"
     *      md-swipe-right="data.selectedIndex-=1;" >
     *
     * </div>
     * </hljs>
     *
     */
    .directive("mdSwipeLeft", ['$parse', '$mdSwipe',
      function MdSwipeLeft($parse, $mdSwipe) {
        return {
          restrict: 'A',
          link :  swipePostLink( $parse, $mdSwipe, "SwipeLeft" )
        };
      }])

    /**
     * @ngdoc directive
     * @module material.components.swipe
     * @name mdSwipeRight
     *
     * @restrict A
     *
     * @description
     * The `<div  md-swipe-right="expression">` directive identifies functionality
     * that attaches HammerJS horizontal swipe right and pan right support to an element. The swipe/pan action
     * can result in activity trigger by evaluating `expression`
     *
     * @param {boolean=} noPan Use of attribute indicates flag to disable detection of `panright` activity
     *
     * @usage
     * <hljs lang="html">
     *
     * <div class="animate-switch-container"
     *      ng-switch on="data.selectedIndex"
     *      md-swipe-left="data.selectedIndex+=1;"
     *      md-swipe-right="data.selectedIndex-=1;" >
     *
     * </div>
     * </hljs>
     *
     */
    .directive( "mdSwipeRight", ['$parse', '$mdSwipe',
      function MdSwipeRight($parse, $mdSwipe) {
        return {
          restrict: 'A',
          link: swipePostLink( $parse, $mdSwipe, "SwipeRight" )
        };
      }
    ]);

    /**
     * Factory to build PostLink function specific to Swipe or Pan direction
     *
     * @param $parse
     * @param $mdSwipe
     * @param name
     * @returns {Function}
     */
    function swipePostLink($parse, $mdSwipe, name ) {

      return function(scope, element, attrs) {
        var direction = name.toLowerCase();
        var directiveName= "md" + name;

        var parentGetter = $parse(attrs[directiveName]) || angular.noop;
        var configureSwipe = $mdSwipe(scope, direction);
        var requestSwipe = function(locals) {
          // build function to request scope-specific swipe response
          parentGetter(scope, locals);
        };

        configureSwipe( element, function onHandleSwipe(ev) {
          if ( ev.type == direction ) {
            requestSwipe();
          }
        });

      }
    }

})();



})();

(function() {
/**
 * @private
 * @ngdoc module
 * @name material.components.switch
 */

angular.module('material.components.switch', [
  'material.components.checkbox',
  'material.components.radioButton',
  'material.services.theming'
])

.directive('mdSwitch', [
  'mdCheckboxDirective',
  'mdRadioButtonDirective',
  '$mdTheming',
  MdSwitch
]);

/**
 * @private
 * @ngdoc directive
 * @module material.components.switch
 * @name mdSwitch
 * @restrict E
 *
 * The switch directive is used very much like the normal [angular checkbox](https://docs.angularjs.org/api/ng/input/input%5Bcheckbox%5D).
 *
 * @param {string} ngModel Assignable angular expression to data-bind to.
 * @param {string=} name Property name of the form under which the control is published.
 * @param {expression=} ngTrueValue The value to which the expression should be set when selected.
 * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.
 * @param {string=} ngChange Angular expression to be executed when input changes due to user interaction with the input element.
 * @param {boolean=} noink Use of attribute indicates use of ripple ink effects.
 * @param {boolean=} disabled Use of attribute indicates the switch is disabled: no ink effects and not selectable
 * @param {string=} ariaLabel Publish the button label used by screen-readers for accessibility. Defaults to the switch's text.
 *
 * @usage
 * <hljs lang="html">
 * <md-switch ng-model="isActive" aria-label="Finished?">
 *   Finished ?
 * </md-switch>
 *
 * <md-switch noink ng-model="hasInk" aria-label="No Ink Effects">
 *   No Ink Effects
 * </md-switch>
 *
 * <md-switch disabled ng-model="isDisabled" aria-label="Disabled">
 *   Disabled
 * </md-switch>
 *
 * </hljs>
 */
function MdSwitch(checkboxDirectives, radioButtonDirectives, $mdTheming) {
  var checkboxDirective = checkboxDirectives[0];
  var radioButtonDirective = radioButtonDirectives[0];

  return {
    restrict: 'E',
    transclude: true,
    template:
      '<div class="md-switch-bar"></div>' +
      '<div class="md-switch-thumb">' +
        radioButtonDirective.template +
      '</div>',
    require: '?ngModel',
    compile: compile
  };

  function compile(element, attr) {
    
    var thumb = angular.element(element[0].querySelector('.md-switch-thumb'));
    //Copy down disabled attributes for checkboxDirective to use
    thumb.attr('disabled', attr.disabled);
    thumb.attr('ngDisabled', attr.ngDisabled);

    var checkboxLink = checkboxDirective.compile(thumb, attr);

    return function (scope, element, attr, ngModelCtrl) {
      $mdTheming(element);
      var thumb = angular.element(element[0].querySelector('.md-switch-thumb'));
      return checkboxLink(scope, thumb, attr, ngModelCtrl);
    };
  }
}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.tabs
 * @description
 *
 * Tabs
 */
angular.module('material.components.tabs', [
  'material.core',
  'material.animations',
  'material.services.theming',
  'material.services.aria'
]);
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.textField
 * @description
 * Form
 */
angular.module('material.components.textField', ['material.core', 'material.services.theming'])
       .directive('mdInputGroup', [ mdInputGroupDirective ])
       .directive('mdInput', ['$mdUtil', mdInputDirective ])
       .directive('mdTextFloat', [ '$mdTheming', '$mdUtil', mdTextFloatDirective ]);



/**
 * @ngdoc directive
 * @name mdTextFloat
 * @module material.components.textField
 *
 * @restrict E
 *
 * @description
 * Use the `<md-text-float>` directive to quickly construct `Floating Label` text fields
 *
 * @param {string} fid Attribute used for accessibility link pairing between the Label and Input elements
 * @param {string=} type Optional value to define the type of input field. Defaults to string.
 * @param {string} label Attribute to specify the input text field hint.
 * @param {string=} ng-model Optional value to assign as existing input text string
 *
 * @usage
 * <hljs lang="html">
 * <md-text-float label="LastName" ng-model="user.lastName" > </md-text-float>
 *
 * <!-- Specify a read-only input field by using the `disabled` attribute -->
 * <md-text-float label="Company"  ng-model="user.company"    disabled > </md-text-float>
 *
 * <!-- Specify an input type if desired. -->
 * <md-text-float label="eMail"    ng-model="user.email" type="email" ></md-text-float>
 * </hljs>
 */
function mdTextFloatDirective($mdTheming, $mdUtil) {
  return {
    restrict: 'E',
    replace: true,
    scope : {
      fid : '@?',
      label : '@?',
      value : '=ngModel'
    },
    compile : function(element, attr) {

      if ( angular.isUndefined(attr.fid) ) {
        attr.fid = $mdUtil.nextUid();
      }

      return {
        pre : function(scope, element, attrs) {
          // transpose `disabled` flag
          if ( angular.isDefined(attrs.disabled) ) {
            element.attr('disabled', true);
            scope.isDisabled = true;
          }

          scope.inputType = attrs.type || "text";
          element.removeAttr('type');

          // transpose optional `class` settings
          element.attr('class', attrs.class );

        },
        post: $mdTheming
      };
    },
    template:
    '<md-input-group ng-disabled="isDisabled" tabindex="-1">' +
    ' <label for="{{fid}}" >{{label}}</label>' +
    ' <md-input id="{{fid}}" ng-model="value" type="{{inputType}}"></md-input>' +
    '</md-input-group>'
  };
}

/*
 * @private
 *
 * @ngdoc directive
 * @name mdInputGroup
 * @module material.components.textField
 * @restrict E
 * @description
 * Use the `<md-input-group>` directive as the grouping parent of a `<md-input>` element.
 *
 * @usage 
 * <hljs lang="html">
 * <md-input-group ng-disabled="isDisabled">
 *   <label for="{{fid}}">{{someLabel}}</label>
 *   <md-input id="{{fid}}" type="text" ng-model="someText"></md-input>
 * </md-input-group>
 * </hljs>
 */
function mdInputGroupDirective() {
  return {
    restrict: 'CE',
    controller: ['$element', function($element) {
      this.setFocused = function(isFocused) {
        $element.toggleClass('md-input-focused', !!isFocused);
      };
      this.setHasValue = function(hasValue) {
        $element.toggleClass('md-input-has-value', hasValue );
      };
    }]
  };

}

/*
 * @private
 *
 * @ngdoc directive
 * @name mdInput
 * @module material.components.textField
 *
 * @restrict E
 *
 * @description
 * Use the `<md-input>` directive as elements within a `<md-input-group>` container
 *
 * @usage
 * <hljs lang="html">
 * <md-input-group ng-disabled="user.isLocked">
 *   <label for="i1">FirstName</label>
 *   <md-input id="i1" ng-model="user.firstName"></md-input>
 * </md-input-group>
 * </hljs>
 */
function mdInputDirective($mdUtil) {
  return {
    restrict: 'E',
    replace: true,
    template: '<input >',
    require: ['^?mdInputGroup', '?ngModel'],
    link: function(scope, element, attr, ctrls) {
      if ( !ctrls[0] ) return;

      var inputGroupCtrl = ctrls[0];
      var ngModelCtrl = ctrls[1];

      // scan for disabled and transpose the `type` value to the <input> element
      var isDisabled = $mdUtil.isParentDisabled(element);

      element.attr({
        'tabindex': isDisabled ? -1 : 0,
        'aria-disabled': isDisabled ? 'true' : 'false',
        'type': attr.type || element.parent().attr('type') || "text"
      });

      // When the input value changes, check if it "has" a value, and
      // set the appropriate class on the input group
      if (ngModelCtrl) {
        //Add a $formatter so we don't use up the render function
        ngModelCtrl.$formatters.push(function(value) {
          inputGroupCtrl.setHasValue( isNotEmpty(value) );
          return value;
        });
      }

      element
        .on('input', function() {
          inputGroupCtrl.setHasValue( isNotEmpty() );
        })
        .on('focus', function(e) {
          // When the input focuses, add the focused class to the group
          inputGroupCtrl.setFocused(true);
        })
        .on('blur', function(e) {
          // When the input blurs, remove the focused class from the group
          inputGroupCtrl.setFocused(false);
          inputGroupCtrl.setHasValue( isNotEmpty() );
        });

      scope.$on('$destroy', function() {
        inputGroupCtrl.setFocused(false);
        inputGroupCtrl.setHasValue(false);
      });


      function isNotEmpty(value) {
        value = angular.isUndefined(value) ? element.val() : value;
        return (angular.isDefined(value) && (value!==null) &&
               (value.toString().trim() != ""));
      }
    }
  };
}




})();

(function() {
/**
 * @ngdoc module
 * @name material.components.toast
 * @description
 * Toast
 */
angular.module('material.components.toast', [
  'material.services.interimElement',
  'material.components.swipe'
])
  .directive('mdToast', [
    MdToastDirective
  ])
  .factory('$mdToast', [
    '$timeout',
    '$$interimElement',
    '$animate',
    '$mdSwipe',
    MdToastService
  ]);

function MdToastDirective() {
  return {
    restrict: 'E'
  };
}

/**
 * @ngdoc service
 * @name $mdToast
 * @module material.components.toast
 *
 * @description
 * `$mdToast` opens a toast nofication on any position on the screen with an optional
 * duration, and provides a simple promise API.
 *
 *
 * ### Restrictions
 * - The toast's template must have an outer `<md-toast>` element.
 * - For a toast action, use element with class `md-action`.
 * - Add the class `md-capsule` for curved corners.
 *
 * @usage
 * <hljs lang="html">
 * <div ng-controller="MyController">
 *   <md-button ng-click="openToast()">
 *     Open a Toast!
 *   </md-button>
 * </div>
 * </hljs>
 *
 * <hljs lang="js">
 * var app = angular.module('app', ['ngMaterial']);
 * app.controller('MyController', function($scope, $mdToast) {
 *   $scope.openToast = function($event) {
 *     $mdToast.show({
 *       template: '<md-toast>Hello!</md-toast>',
 *       hideDelay: 3000
 *     });
 *   };
 * });
 * </hljs>
 */

 /**
 * @ngdoc method
 * @name $mdToast#show
 *
 * @description
 * Show a toast dialog with the specified options.
 *
 * @param {object} options An options object, with the following properties:
 *
 *   - `templateUrl` - `{string=}`: The url of an html template file that will
 *     be used as the content of the toast. Restrictions: the template must
 *     have an outer `md-toast` element.
 *   - `template` - `{string=}`: Same as templateUrl, except this is an actual
 *     template string.
 *   - `hideDelay` - `{number=}`: How many milliseconds the toast should stay
 *     active before automatically closing.  Set to 0 or false to have the toast stay open until 
 *     closed manually. Default: 3000.
 *   - `position` - `{string=}`: Where to place the toast. Available: any combination
 *     of 'bottom', 'left', 'top', 'right', 'fit'. Default: 'bottom left'.
 *   - `controller` - `{string=}`: The controller to associate with this toast.
 *     The controller will be injected the local `$hideToast`, which is a function
 *     used to hide the toast.
 *   - `locals` - `{string=}`: An object containing key/value pairs. The keys will
 *     be used as names of values to inject into the controller. For example,
 *     `locals: {three: 3}` would inject `three` into the controller with the value
 *     of 3.
 *   - `resolve` - `{object=}`: Similar to locals, except it takes promises as values
 *     and the toast will not open until the promises resolve.
 *   - `controllerAs` - `{string=}`: An alias to assign the controller to on the scope.
 *
 * @returns {promise} A promise that can be resolved with `$mdToast.hide()` or
 * rejected with `$mdBottomSheet.cancel()`.
 */

/**
 * @ngdoc method
 * @name $mdToast#hide
 *
 * @description
 * Hide the existing toast and resolve the promise returned from `$mdToast.show()`.
 *
 * @param {*=} response An argument for the resolved promise.
 *
 */

/**
 * @ngdoc method
 * @name $mdToast#cancel
 *
 * @description
 * Hide the existing toast and reject the promise returned from 
 * `$mdToast.show()`.
 *
 * @param {*=} response An argument for the rejected promise.
 *
 */

function MdToastService($timeout, $$interimElement, $animate, $mdSwipe, $mdTheming) {

  var factoryDef = {
    onShow: onShow,
    onRemove: onRemove,
    position: 'bottom left',
    themable: true,
    hideDelay: 3000
  };

  var $mdToast = $$interimElement(factoryDef);
  return $mdToast;

  function onShow(scope, element, options) {
    // 'top left' -> 'md-top md-left'
    element.addClass(options.position.split(' ').map(function(pos) {
      return 'md-' + pos;
    }).join(' '));
    options.parent.addClass(toastOpenClass(options.position));

    var configureSwipe = $mdSwipe(scope, 'swipeleft swiperight');
    options.detachSwipe = configureSwipe(element, function(ev) {
      //Add swipeleft/swiperight class to element so it can animate correctly
      element.addClass('md-' + ev.type);
      $timeout($mdToast.hide);
    });

    return $animate.enter(element, options.parent);
  }

  function onRemove(scope, element, options) {
    options.detachSwipe();
    options.parent.removeClass(toastOpenClass(options.position));
    return $animate.leave(element);
  }

  function toastOpenClass(position) {
    return 'md-toast-open-' +
      (position.indexOf('top') > -1 ? 'top' : 'bottom');
  }
}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.toolbar
 */
angular.module('material.components.toolbar', [
  'material.core',
  'material.components.content',
  'material.services.theming',
  'material.animations'
])
  .directive('mdToolbar', [
    '$$rAF',
    '$mdEffects',
    '$mdUtil',
    '$mdTheming',
    mdToolbarDirective
  ]);

/**
 * @ngdoc directive
 * @name mdToolbar
 * @module material.components.toolbar
 * @restrict E
 * @description
 * `md-toolbar` is used to place a toolbar in your app.
 *
 * Toolbars are usually used above a content area to display the title of the
 * current page, and show relevant action buttons for that page.
 *
 * You can change the height of the toolbar by adding either the
 * `md-medium-tall` or `md-tall` class to the toolbar.
 *
 * @usage
 * <hljs lang="html">
 * <div layout="vertical" layout-fill>
 *   <md-toolbar>
 *
 *     <div class="md-toolbar-tools">
 *       <span>My App's Title</span>
 *
 *       <!-- fill up the space between left and right area -->
 *       <span flex></span>
 *
 *       <md-button>
 *         Right Bar Button
 *       </md-button>
 *     </div>
 *
 *   </md-toolbar>
 *   <md-content>
 *     Hello!
 *   </md-content>
 * </div>
 * </hljs>
 *
 * @param {boolean=} scrollShrink Whether the header should shrink away as 
 * the user scrolls down, and reveal itself as the user scrolls up. 
 * Note: for scrollShrink to work, the toolbar must be a sibling of a 
 * `md-content` element, placed before it. See the scroll shrink demo.
 *
 *
 * @param {number=} shrinkSpeedFactor How much to change the speed of the toolbar's
 * shrinking by. For example, if 0.25 is given then the toolbar will shrink
 * at one fourth the rate at which the user scrolls down. Default 0.5.
 */ 
function mdToolbarDirective($$rAF, $mdEffects, $mdUtil, $mdTheming) {

  return {
    restrict: 'E',
    controller: angular.noop,
    link: function(scope, element, attr) {
      $mdTheming(element);

      if (angular.isDefined(attr.scrollShrink)) {
        setupScrollShrink();
      }

      function setupScrollShrink() {
        // Current "y" position of scroll
        var y = 0;
        // Store the last scroll top position
        var prevScrollTop = 0;

        var shrinkSpeedFactor = attr.shrinkSpeedFactor || 0.5;

        var toolbarHeight;
        var contentElement;

        var debouncedContentScroll = $$rAF.debounce(onContentScroll);
        var debouncedUpdateHeight = $mdUtil.debounce(updateToolbarHeight, 5 * 1000);

        // Wait for $mdContentLoaded event from mdContent directive.
        // If the mdContent element is a sibling of our toolbar, hook it up
        // to scroll events.
        scope.$on('$mdContentLoaded', onMdContentLoad);

        function onMdContentLoad($event, newContentEl) {
          if ($mdUtil.elementIsSibling(element, newContentEl)) {
            // unhook old content event listener if exists
            if (contentElement) {
              contentElement.off('scroll', debouncedContentScroll);
            }

            newContentEl.on('scroll', debouncedContentScroll);
            newContentEl.attr('scroll-shrink', 'true');

            contentElement = newContentEl;
            $$rAF(updateToolbarHeight);
          }
        }

        function updateToolbarHeight() {
          toolbarHeight = element.prop('offsetHeight');
          // Add a negative margin-top the size of the toolbar to the content el.
          // The content will start transformed down the toolbarHeight amount,
          // so everything looks normal.
          //
          // As the user scrolls down, the content will be transformed up slowly
          // to put the content underneath where the toolbar was.
          contentElement.css(
            'margin-top', 
            (-toolbarHeight * shrinkSpeedFactor) + 'px'
          );
          onContentScroll();
        }

        function onContentScroll(e) {
          var scrollTop = e ? e.target.scrollTop : prevScrollTop;

          debouncedUpdateHeight();

          y = Math.min(
            toolbarHeight / shrinkSpeedFactor, 
            Math.max(0, y + scrollTop - prevScrollTop)
          );

          element.css(
            $mdEffects.TRANSFORM, 
            'translate3d(0,' + (-y * shrinkSpeedFactor) + 'px,0)'
          );
          contentElement.css(
            $mdEffects.TRANSFORM, 
            'translate3d(0,' + ((toolbarHeight - y) * shrinkSpeedFactor) + 'px,0)'
          );

          prevScrollTop = scrollTop;
        }

      }

    }
  };

}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.tooltip
 */
angular.module('material.components.tooltip', [
  'material.core',
  'material.services.theming'
])

.directive('mdTooltip', [
  '$timeout',
  '$window',
  '$$rAF',
  '$document',
  '$mdUtil',
  '$mdTheming',
  MdTooltipDirective
]);

/**
 * @ngdoc directive
 * @name mdTooltip
 * @module material.components.tooltip
 * @description
 * Tooltips are used to describe elements that are interactive and primarily graphical (not textual).
 *
 * Place a `<md-tooltip>` as a child of the element it describes.
 *
 * A tooltip will activate when the user focuses, hovers over, or touches the parent.
 *
 * @usage
 * <hljs lang="html">
 * <md-icon icon="/img/icons/ic_play_arrow_24px.svg">
 *   <md-tooltip>
 *     Play Music
 *   </md-tooltip>
 * </md-icon>
 * </hljs>
 *
 * @param {expression=} visible Boolean bound to whether the tooltip is 
 * currently visible.
 */
function MdTooltipDirective($timeout, $window, $$rAF, $document, $mdUtil, $mdTheming) {

  var TOOLTIP_SHOW_DELAY = 400;
  var TOOLTIP_WINDOW_EDGE_SPACE = 8;
  // We have to append tooltips to the body, because we use
  // getBoundingClientRect() to find where to append the tooltip.
  var tooltipParent = angular.element(document.body);

  return {
    restrict: 'E',
    transclude: true,
    require: '^?mdContent',
    template: 
      '<div class="md-background"></div>' +
      '<div class="md-content" ng-transclude></div>',
    scope: {
      visible: '=?'
    },
    link: postLink
  };

  function postLink(scope, element, attr, contentCtrl) {
    $mdTheming(element);
    var parent = element.parent();

    // We will re-attach tooltip when visible
    element.detach();
    element.attr('role', 'tooltip');
    element.attr('id', attr.id || ('tooltip_' + $mdUtil.nextUid()));

    parent.on('focus mouseenter touchstart', function() {
      setVisible(true);
    });
    parent.on('blur mouseleave touchend touchcancel', function() {
      // Don't hide the tooltip if the parent is still focused.
      if ($document.activeElement === parent[0]) return;
      setVisible(false);
    });

    scope.$watch('visible', function(isVisible) {
      if (isVisible) showTooltip();
      else hideTooltip();
    });
    
    var debouncedOnResize = $$rAF.debounce(onWindowResize);
    angular.element($window).on('resize', debouncedOnResize);
    function onWindowResize() {
      // Reposition on resize
      if (scope.visible) positionTooltip();
    }

    // Be sure to completely cleanup the element on destroy
    scope.$on('$destroy', function() {
      scope.visible = false;
      element.remove();
      angular.element($window).off('resize', debouncedOnResize);
    });

    // *******
    // Methods
    // *******

    // If setting visible to true, debounce to TOOLTIP_SHOW_DELAY ms
    // If setting visible to false and no timeout is active, instantly hide the tooltip.
    function setVisible(value) {
      setVisible.value = !!value;

      if (!setVisible.queued) {
        if (value) {
          setVisible.queued = true;
          $timeout(function() {
            scope.visible = setVisible.value;
            setVisible.queued = false;
          }, TOOLTIP_SHOW_DELAY);

        } else {
          $timeout(function() { scope.visible = false; });
        }
      }
    }

    function showTooltip() {
      // Insert the element before positioning it, so we can get position
      // (tooltip is hidden by default)
      element.removeClass('md-hide');
      parent.attr('aria-describedby', element.attr('id'));
      tooltipParent.append(element);

      // Wait until the element has been in the dom for two frames before 
      // fading it in.
      // Additionally, we position the tooltip twice to avoid positioning bugs
      //positionTooltip();
      $$rAF(function() {

        $$rAF(function() {
          positionTooltip();
          if (!scope.visible) return;
          element.addClass('md-show');
        });

      });
    }

    function hideTooltip() {
      element.removeClass('md-show').addClass('md-hide');
      parent.removeAttr('aria-describedby');
      $timeout(function() {
        if (scope.visible) return;
        element.detach();
      }, 200, false);
    }

    function positionTooltip(rerun) {
      var tipRect = element[0].getBoundingClientRect();
      var parentRect = parent[0].getBoundingClientRect();

      if (contentCtrl) {
        parentRect.top += contentCtrl.$element.prop('scrollTop');
        parentRect.left += contentCtrl.$element.prop('scrollLeft');
      }

      // Default to bottom position if possible
      var tipDirection = 'bottom';
      var newPosition = {
        left: parentRect.left + parentRect.width / 2 - tipRect.width / 2,
        top: parentRect.top + parentRect.height
      };

      // If element bleeds over left/right of the window, place it on the edge of the window.
      newPosition.left = Math.min(
        newPosition.left, 
        $window.innerWidth - tipRect.width - TOOLTIP_WINDOW_EDGE_SPACE
      );
      newPosition.left = Math.max(newPosition.left, TOOLTIP_WINDOW_EDGE_SPACE);

      // If element bleeds over the bottom of the window, place it above the parent.
      if (newPosition.top + tipRect.height > $window.innerHeight) {
        newPosition.top = parentRect.top - tipRect.height;
        tipDirection = 'top';
      }

      element.css({top: newPosition.top + 'px', left: newPosition.left + 'px'});
      // Tell the CSS the size of this tooltip, as a multiple of 32.
      element.attr('width-32', Math.ceil(tipRect.width / 32));
      element.attr('md-direction', tipDirection);
    }

  }

}
})();

(function() {
/**
 * @ngdoc module
 * @name material.components.whiteframe
 */
angular.module('material.components.whiteframe', []);
})();

(function() {
angular.module('material.services.aria', [])

.service('$mdAria', [
  '$$rAF',
  '$log',
  AriaService
]);

function AriaService($$rAF, $log) {

  return {
    expect: expect,
    expectAsync: expectAsync,
    expectWithText: expectWithText
  };

  /**
   * Check if expected attribute has been specified on the target element
   * @param element
   * @param attrName
   * @param {optional} defaultValue What to set the attr to if no value is found
   */
  function expect(element, attrName, defaultValue) {
    var node = element[0];
    if (!node.hasAttribute(attrName)) {

      defaultValue = angular.isString(defaultValue) && defaultValue.trim() || '';
      if (defaultValue.length) {
        element.attr(attrName, defaultValue);
      } else {
        $log.warn('ARIA: Attribute "', attrName, '", required for accessibility, is missing on node:', node);
      }

    }
  }

  function expectAsync(element, attrName, defaultValueGetter) {
    // Problem: when retrieving the element's contents synchronously to find the label,
    // the text may not be defined yet in the case of a binding.
    // There is a higher chance that a binding will be defined if we wait one frame.
    $$rAF(function() {
      expect(element, attrName, defaultValueGetter());
    });
  }

  function expectWithText(element, attrName) {
    expectAsync(element, attrName, function() {
      return element.text().trim();
    });
  }

}
})();

(function() {
angular.module('material.services.attrBind', [
])
  .factory('$attrBind', [
    '$parse', 
    '$interpolate', 
    MdAttrBind 
  ]);

/**
 *  This service allows directives to easily databind attributes to private scope properties.
 *
 * @private
 */
function MdAttrBind($parse, $interpolate) {
  var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/;

  return function (scope, attrs, bindDefinition, bindDefaults) {
    angular.forEach(bindDefinition || {}, function (definition, scopeName) {
      //Adapted from angular.js $compile
      var match = definition.match(LOCAL_REGEXP) || [],
        attrName = match[3] || scopeName,
        mode = match[1], // @, =, or &
        parentGet,
        unWatchFn;

      switch (mode) {
        case '@':   // One-way binding from attribute into scope

          attrs.$observe(attrName, function (value) {
            scope[scopeName] = value;
          });
          attrs.$$observers[attrName].$$scope = scope;

          if (!bypassWithDefaults(attrName, scopeName)) {
            // we trigger an interpolation to ensure
            // the value is there for use immediately
            scope[scopeName] = $interpolate(attrs[attrName])(scope);
          }
          break;

        case '=':   // Two-way binding...

          if (!bypassWithDefaults(attrName, scopeName)) {
            // Immediate evaluation
            scope[scopeName] = (attrs[attrName] === "") ? true : scope.$eval(attrs[attrName]);

            // Data-bind attribute to scope (incoming) and
            // auto-release watcher when scope is destroyed

            unWatchFn = scope.$watch(attrs[attrName], function (value) {
              scope[scopeName] = value;
            });
            scope.$on('$destroy', unWatchFn);
          }

          break;

        case '&':   // execute an attribute-defined expression in the context of the parent scope

          if (!bypassWithDefaults(attrName, scopeName, angular.noop)) {
            /* jshint -W044 */
            if (attrs[attrName] && attrs[attrName].match(RegExp(scopeName + '\(.*?\)'))) {
              throw new Error('& expression binding "' + scopeName + '" looks like it will recursively call "' +
                attrs[attrName] + '" and cause a stack overflow! Please choose a different scopeName.');
            }

            parentGet = $parse(attrs[attrName]);
            scope[scopeName] = function (locals) {
              return parentGet(scope, locals);
            };
          }

          break;
      }
    });

    /**
     * Optional fallback value if attribute is not specified on element
     * @param scopeName
     */
    function bypassWithDefaults(attrName, scopeName, defaultVal) {
      if (!angular.isDefined(attrs[attrName])) {
        var hasDefault = bindDefaults && bindDefaults.hasOwnProperty(scopeName);
        scope[scopeName] = hasDefault ? bindDefaults[scopeName] : defaultVal;
        return true;
      }
      return false;
    }

  };
}
})();

(function() {
/*
 * @ngdoc module
 * @name material.services.compiler
 * @description compiler service
 */
angular.module('material.services.compiler', [
])
  .service('$mdCompiler', [
    '$q',
    '$http',
    '$injector',
    '$compile',
    '$controller',
    '$templateCache',
    mdCompilerService
  ]);

function mdCompilerService($q, $http, $injector, $compile, $controller, $templateCache) {

  /*
   * @ngdoc service
   * @name $mdCompiler
   * @module material.services.compiler
   * @description
   * The $mdCompiler service is an abstraction of angular's compiler, that allows the developer
   * to easily compile an element with a templateUrl, controller, and locals.
   *
   * @usage
   * <hljs lang="js">
   * $mdCompiler.compile({
   *   templateUrl: 'modal.html',
   *   controller: 'ModalCtrl',
   *   locals: {
   *     modal: myModalInstance;
   *   }
   * }).then(function(compileData) {
   *   compileData.element; // modal.html's template in an element
   *   compileData.link(myScope); //attach controller & scope to element
   * });
   * </hljs>
   */

   /*
    * @ngdoc method
    * @name $mdCompiler#compile
    * @description A helper to compile an HTML template/templateUrl with a given controller,
    * locals, and scope.
    * @param {object} options An options object, with the following properties:
    *
    *    - `controller` - `{(string=|function()=}` Controller fn that should be associated with
    *      newly created scope or the name of a registered controller if passed as a string.
    *    - `controllerAs` - `{string=}` A controller alias name. If present the controller will be
    *      published to scope under the `controllerAs` name.
    *    - `template` - `{string=}` An html template as a string.
    *    - `templateUrl` - `{string=}` A path to an html template.
    *    - `transformTemplate` - `{function(template)=}` A function which transforms the template after
    *      it is loaded. It will be given the template string as a parameter, and should
    *      return a a new string representing the transformed template.
    *    - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should
    *      be injected into the controller. If any of these dependencies are promises, the compiler
    *      will wait for them all to be resolved, or if one is rejected before the controller is
    *      instantiated `compile()` will fail..
    *      * `key` - `{string}`: a name of a dependency to be injected into the controller.
    *      * `factory` - `{string|function}`: If `string` then it is an alias for a service.
    *        Otherwise if function, then it is injected and the return value is treated as the
    *        dependency. If the result is a promise, it is resolved before its value is 
    *        injected into the controller.
    *
    * @returns {object=} promise A promise, which will be resolved with a `compileData` object.
    * `compileData` has the following properties: 
    *
    *   - `element` - `{element}`: an uncompiled element matching the provided template.
    *   - `link` - `{function(scope)}`: A link function, which, when called, will compile
    *     the element and instantiate the provided controller (if given).
    *   - `locals` - `{object}`: The locals which will be passed into the controller once `link` is
    *     called.
    */
  this.compile = function(options) {
    var templateUrl = options.templateUrl;
    var template = options.template || '';
    var controller = options.controller;
    var controllerAs = options.controllerAs;
    var resolve = options.resolve || {};
    var locals = options.locals || {};
    var transformTemplate = options.transformTemplate || angular.identity;

    // Take resolve values and invoke them.  
    // Resolves can either be a string (value: 'MyRegisteredAngularConst'),
    // or an invokable 'factory' of sorts: (value: function ValueGetter($dependency) {})
    angular.forEach(resolve, function(value, key) {
      if (angular.isString(value)) {
        resolve[key] = $injector.get(value);
      } else {
        resolve[key] = $injector.invoke(value);
      }
    });
    //Add the locals, which are just straight values to inject
    //eg locals: { three: 3 }, will inject three into the controller
    angular.extend(resolve, locals);

    if (templateUrl) {
      resolve.$template = $http.get(templateUrl, {cache: $templateCache})
        .then(function(response) {
          return response.data;
        });
    } else {
      resolve.$template = $q.when(template);
    }

    // Wait for all the resolves to finish if they are promises
    return $q.all(resolve).then(function(locals) {

      var template = transformTemplate(locals.$template);
      var element = angular.element('<div>').html(template).contents();
      var linkFn = $compile(element);

      //Return a linking function that can be used later when the element is ready
      return {
        locals: locals,
        element: element,
        link: function link(scope) {
          locals.$scope = scope;

          //Instantiate controller if it exists, because we have scope
          if (controller) {
            var ctrl = $controller(controller, locals);
            //See angular-route source for this logic
            element.data('$ngControllerController', ctrl);
            element.children().data('$ngControllerController', ctrl);

            if (controllerAs) {
              scope[controllerAs] = ctrl;
            }
          }

          return linkFn(scope);
        }
      };
    });

  };
}
})();

(function() {
/*
 * @ngdoc module
 * @name material.services.interimElement
 * @description InterimElement
 */

angular.module('material.services.interimElement', [
  'material.services.compiler',
  'material.services.theming'
])
.factory('$$interimElement', [
  '$q',
  '$rootScope',
  '$timeout',
  '$rootElement',
  '$animate',
  '$mdCompiler',
  '$mdTheming',
  InterimElementFactory
]);

/*
 * @ngdoc service
 * @name $$interimElement
 *
 * @description
 *
 * Factory that contructs `$$interimElement.$service` services. 
 * Used internally in material design for elements that appear on screen temporarily.
 * The service provides a promise-like API for interacting with the temporary
 * elements.
 *
 * ```js
 * app.service('$mdToast', function($$interimElement) {
 *   var $mdToast = $$interimElement(toastDefaultOptions);
 *   return $mdToast;
 * });
 * ```
 * @param {object=} defaultOptions Options used by default for the `show` method on the service.
 *
 * @returns {$$interimElement.$service}
 *
 */

function InterimElementFactory($q, $rootScope, $timeout, $rootElement, $animate, $mdCompiler, $mdTheming) {

  return function createInterimElementService(defaults) {

    /*
     * @ngdoc service
     * @name $$interimElement.$service
     *
     * @description
     * A service used to control inserting and removing an element into the DOM.
     *
     */


    var stack = [];

    defaults = angular.extend({
      onShow: function(scope, $el, options) {
        return $animate.enter($el, options.parent);
      },
      onRemove: function(scope, $el, options) {
        return $animate.leave($el);
      },
    }, defaults || {});

    var service;
    return service = {
      show: show,
      hide: hide,
      cancel: cancel
    };

    /*
     * @ngdoc method
     * @name $$interimElement.$service#show
     * @kind function
     *
     * @description
     * Compiles and inserts an element into the DOM.
     *
     * @param {Object} options Options object to compile with.
     *
     * @returns {Promise} Promise that will resolve when the service
     * has `#close()` or `#cancel()` called.
     *
     */
    function show(options) {
      if (stack.length) {
        service.hide();
      }

      var interimElement = new InterimElement(options);
      stack.push(interimElement);
      return interimElement.show().then(function() {
        return interimElement.deferred.promise;
      });
    }

    /*
     * @ngdoc method
     * @name $$interimElement.$service#hide
     * @kind function
     *
     * @description
     * Removes the `$interimElement` from the DOM and resolves the promise returned from `show`
     *
     * @param {*} resolveParam Data to resolve the promise with
     *
     * @returns undefined data that resolves after the element has been removed.
     *
     */
    function hide(success) {
      var interimElement = stack.shift();
      interimElement && interimElement.remove().then(function() {
        interimElement.deferred.resolve(success);
      });
    }

    /*
     * @ngdoc method
     * @name $$interimElement.$service#cancel
     * @kind function
     *
     * @description
     * Removes the `$interimElement` from the DOM and rejects the promise returned from `show`
     *
     * @param {*} reason Data to reject the promise with
     *
     * @returns undefined
     *
     */
    function cancel(reason) {
      var interimElement = stack.shift();
      interimElement && interimElement.remove().then(function() {
        interimElement.deferred.reject(reason);
      });
    }


    /*
     * Internal Interim Element Object
     * Used internally to manage the DOM element and related data
     */
    function InterimElement(options) {
      var self;
      var hideTimeout, element;

      options = options || {};

      options = angular.extend({
        scope: options.scope || $rootScope.$new(options.isolateScope)
      }, defaults, options);

      return self = {
        options: options,
        deferred: $q.defer(),
        show: function() {
          return $mdCompiler.compile(options).then(function(compiledData) {
            // Search for parent at insertion time, if not specified
            if (!options.parent) {
              options.parent = $rootElement.find('body');
              if (!options.parent.length) options.parent = $rootElement;
            }
            element = compiledData.link(options.scope);
            if (options.themable) $mdTheming(element);
            var ret = options.onShow(options.scope, element, options);
            return $q.when(ret)
              .then(function(){
                  // Issue onComplete callback when the `show()` finishes
                  var notify = options.onComplete || angular.noop;
                  notify.apply(null, [options.scope, element, options]);
              })
              .then(startHideTimeout);

            function startHideTimeout() {
              if (options.hideDelay) {
                hideTimeout = $timeout(service.hide, options.hideDelay) ;
              }
            }
          });
        },
        cancelTimeout: function() {
          if (hideTimeout) {
            $timeout.cancel(hideTimeout);
            hideTimeout = undefined;
          }
        },
        remove: function() {
          self.cancelTimeout();
          var ret = options.onRemove(options.scope, element, options);
          return $q.when(ret).then(function() {
            options.scope.$destroy();
          });
        }
      };
    }
  };
}

})();

(function() {
angular.module('material.services.media', [
  'material.core'
])

.factory('$mdMedia', [
  '$window',
  '$mdUtil',
  '$timeout',
  mdMediaFactory
]);

function mdMediaFactory($window, $mdUtil, $timeout) {
  var cache = $mdUtil.cacheFactory('$mdMedia', { capacity: 15 });
  var presets = {
    sm: '(min-width: 600px)',
    md: '(min-width: 960px)',
    lg: '(min-width: 1200px)'
  };

  angular.element($window).on('resize', updateAll);

  return $mdMedia;

  function $mdMedia(query) {
    query = validate(query);
    var result;
    if ( !angular.isDefined(result = cache.get(query)) ) {
      return add(query);
    }
    return result;
  }

  function validate(query) {
    return presets[query] || (
      query.charAt(0) != '(' ?  ('(' + query + ')') : query
    );
  }

  function add(query) {
    return cache.put(query, !!$window.matchMedia(query).matches);
  }
  
  function updateAll() {
    var keys = cache.keys();
    if (keys.length) {
      for (var i = 0, ii = keys.length; i < ii; i++) {
        cache.put(keys[i], !!$window.matchMedia(keys[i]).matches);
      }
      // trigger a $digest()
      $timeout(angular.noop);
    }
  }

}
})();

(function() {
/*
 * @ngdoc module
 * @name material.services.registry
 *
 * @description
 * A component registry system for accessing various component instances in an app.
 */
angular.module('material.services.registry', [
])
  .factory('$mdComponentRegistry', [
    '$log', 
    mdComponentRegistry 
  ]);

/*
 * @ngdoc service
 * @name $mdComponentRegistry
 * @module material.services.registry
 *
 * @description
 * $mdComponentRegistry enables the user to interact with multiple instances of
 * certain complex components in a running app.
 */
function mdComponentRegistry($log) {
  var instances = [];

  return {
    /**
     * Used to print an error when an instance for a handle isn't found.
     */
    notFoundError: function(handle) {
      $log.error('No instance found for handle', handle);
    },
    /**
     * Return all registered instances as an array.
     */
    getInstances: function() {
      return instances;
    },

    /**
     * Get a registered instance.
     * @param handle the String handle to look up for a registered instance.
     */
    get: function(handle) {
      var i, j, instance;
      for(i = 0, j = instances.length; i < j; i++) {
        instance = instances[i];
        if(instance.$$mdHandle === handle) {
          return instance;
        }
      }
      return null;
    },

    /**
     * Register an instance.
     * @param instance the instance to register
     * @param handle the handle to identify the instance under.
     */
    register: function(instance, handle) {
      instance.$$mdHandle = handle;
      instances.push(instance);

      return function deregister() {
        var index = instances.indexOf(instance);
        if (index !== -1) {
          instances.splice(index, 1);
        }
      };
    }
  }
}

})();

(function() {
/*
 * @ngdoc module
 * @name material.services.theming
 * @description Used to provide theming to angular-material directives
 */

angular.module('material.services.theming', [
])
.directive('mdTheme', [
  '$interpolate',
  ThemingDirective
])
.directive('mdThemable', [
  '$mdTheming',
  ThemableDirective
])
.provider('$mdTheming', [
  Theming
]);

/**
 * @ngdoc provider
 * @name $mdThemingProvider
 *
 * @description Provider to configure the `$mdTheming` service.
 */

/**
 * @ngdoc method
 * @name $mdThemingProvider#setDefaultTheme
 * @param {string} themeName Default theme name to be applied to elements. Default value is `default`.
 */

/**
 * @ngdoc method
 * @name $mdThemingProvider#alwaysWatchTheme
 * @param {boolean} watch Whether or not to always watch themes for changes and re-apply
 * classes when they change. Default is `false`. Enabling can reduce performance.
 */

/**
 * @ngdoc service
 * @name $mdTheming
 *
 * @description
 *
 * Service that makes an element apply theming related classes to itself.
 *
 * ```js
 * app.directive('myFancyDirective', function($mdTheming) {
 *   return {
 *     restrict: 'e',
 *     link: function(scope, el, attrs) {
 *       $mdTheming(el);
 *     }
 *   };
 * });
 * ```
 * @param {el=} element to apply theming to
 */

function Theming($injector) {
  var defaultTheme = 'default';
  var alwaysWatchTheme = false;
  return {
    setDefaultTheme: function(theme) {
      defaultTheme = theme;
    },
    alwaysWatchTheme: function(alwaysWatch) {
      alwaysWatchTheme = alwaysWatch;
    },
    $get: ['$rootElement', '$rootScope', ThemingService]
  };

  function ThemingService($rootElement, $rootScope) {
    applyTheme.inherit = function(el, parent) {
      var ctrl = parent.controller('mdTheme');

      var attrThemeValue = el.attr('md-theme-watch');
      if ( (alwaysWatchTheme || angular.isDefined(attrThemeValue)) && attrThemeValue != 'false') { 
        var deregisterWatch = $rootScope.$watch(function() { 
          return ctrl && ctrl.$mdTheme || defaultTheme; 
        }, changeTheme);
        el.on('$destroy', deregisterWatch);
      } else {
        var theme = ctrl && ctrl.$mdTheme || defaultTheme;
        changeTheme(theme);
      }

      function changeTheme(theme) {
        var oldTheme = el.data('$mdThemeName');
        if (oldTheme) el.removeClass('md-' + oldTheme +'-theme');
        el.addClass('md-' + theme + '-theme');
        el.data('$mdThemeName', theme);
      }
    };

    return applyTheme;

    function applyTheme(scope, el) {
      // Allow us to be invoked via a linking function signature.
      if (el === undefined) { 
        el = scope;
        scope = undefined;
      }
      if (scope === undefined) {
        scope = $rootScope;
      }
      applyTheme.inherit(el, el);
    }
  }
}

function ThemingDirective($interpolate) {
  return {
    priority: 100,
    link: {
      pre: function(scope, el, attrs) {
        var ctrl = {
          $setTheme: function(theme) {
            ctrl.$mdTheme = theme;
          }
        };
        el.data('$mdThemeController', ctrl);
        ctrl.$setTheme($interpolate(attrs.mdTheme)(scope));
        attrs.$observe('mdTheme', ctrl.$setTheme);
      }
    }
  };
}

function ThemableDirective($mdTheming) {
  return $mdTheming;
}
})();

(function() {
/**
 * Conditionally configure ink bar animations when the
 * tab selection changes. If `nobar` then do not show the
 * bar nor animate.
 */
angular.module('material.components.tabs')

.directive('mdTabsInkBar', [
  '$mdEffects',
  '$window',
  '$$rAF',
  '$timeout',
  MdTabInkDirective
]);

function MdTabInkDirective($mdEffects, $window, $$rAF, $timeout) {

  return {
    restrict: 'E',
    require: ['^?nobar', '^mdTabs'],
    link: postLink
  };

  function postLink(scope, element, attr, ctrls) {
    var nobar = ctrls[0];
    var tabsCtrl = ctrls[1];

    if (nobar) return;

    var debouncedUpdateBar = $$rAF.debounce(updateBar);

    scope.$watch(tabsCtrl.selected, updateBar);
    scope.$on('$mdTabsChanged', debouncedUpdateBar);
    scope.$on('$mdTabsPaginationChanged', debouncedUpdateBar);
    angular.element($window).on('resize', onWindowResize);

    function onWindowResize() {
      debouncedUpdateBar();
      $timeout(debouncedUpdateBar, 100, false);
    }

    scope.$on('$destroy', function() {
      angular.element($window).off('resize', onWindowResize);
    });

    function updateBar() {
      var selectedElement = tabsCtrl.selected() && tabsCtrl.selected().element;

      if (!selectedElement || tabsCtrl.count() < 2) {
        element.css({
          display : 'none',
          width : '0px'
        });
      } else {
        var width = selectedElement.prop('offsetWidth');
        var left = selectedElement.prop('offsetLeft') + (tabsCtrl.$$pagingOffset || 0);

        element.css({
          display : width > 0 ? 'block' : 'none',
          width: width + 'px'
        });
        element.css($mdEffects.TRANSFORM, 'translate3d(' + left + 'px,0,0)');
      }
    }

  }

}
})();

(function() {

angular.module('material.components.tabs')

.directive('mdTabsPagination', [
  '$mdEffects',
  '$window',
  '$$rAF',
  '$$q',
  '$timeout',
  TabPaginationDirective
]);

function TabPaginationDirective($mdEffects, $window, $$rAF, $$q, $timeout) {

  // TODO allow configuration of TAB_MIN_WIDTH
  // Must match tab min-width rule in _tabs.scss
  var TAB_MIN_WIDTH = 8 * 12; 
  // Must match (2 * width of paginators) in scss
  var PAGINATORS_WIDTH = (8 * 4) * 2;

  return {
    restrict: 'A',
    require: '^mdTabs',
    link: postLink
  };

  function postLink(scope, element, attr, tabsCtrl) {

    var tabsParent = element.children();
    var state = scope.pagination = {
      page: -1,
      active: false,
      clickNext: function() { userChangePage(+1); },
      clickPrevious: function() { userChangePage(-1); }
    };

    updatePagination();
    var debouncedUpdatePagination = $$rAF.debounce(updatePagination);

    scope.$on('$mdTabsChanged', debouncedUpdatePagination);
    angular.element($window).on('resize', debouncedUpdatePagination);

    // Listen to focus events bubbling up from md-tab elements
    tabsParent.on('focusin', onTabsFocusIn);

    scope.$on('$destroy', function() {
      angular.element($window).off('resize', debouncedUpdatePagination);
      tabsParent.off('focusin', onTabsFocusIn);
    });

    scope.$watch(tabsCtrl.selected, onSelectedTabChange);

    // Allows pagination through focus change.
    function onTabsFocusIn(ev) {
      if (!state.active) return;

      var tab = angular.element(ev.target).controller('mdTab');
      var pageIndex = getPageForTab(tab);
      if (pageIndex !== state.page) {
        // If the focused element is on a new page, don't focus yet.
        tab.element.blur();
        // Go to the new page, wait for the page transition to end, then focus.
        setPage(pageIndex).then(function() {
          tab.element.focus();
        });
      }
    }

    function onSelectedTabChange(selectedTab) {
      if (!selectedTab) return;

      if (state.active) {
        var selectedTabPage = getPageForTab(selectedTab);
        setPage(selectedTabPage);
      } else {
        debouncedUpdatePagination();
      }
    }

    // Called when page is changed by a user action (click)
    function userChangePage(increment) {
      var newPage = state.page + increment;
      var newTab;
      if (!tabsCtrl.selected() || getPageForTab(tabsCtrl.selected()) !== newPage) {
        var startIndex;
        if (increment < 0) {
          // If going backward, select the previous available tab, starting from
          // the first item on the page after newPage.
          startIndex = (newPage + 1) * state.itemsPerPage;
          newTab = tabsCtrl.previous( tabsCtrl.itemAt(startIndex) );
        } else {
          // If going forward, select the next available tab, starting with the
          // last item before newPage.
          startIndex = (newPage * state.itemsPerPage) - 1;
          newTab = tabsCtrl.next( tabsCtrl.itemAt(startIndex) );
        }
      }
      setPage(newPage).then(function() {
        newTab && newTab.element.focus();
      });
      newTab && tabsCtrl.select(newTab);
    }

    function updatePagination() {
      var tabs = element.find('md-tab');
      var tabsWidth = element.parent().prop('clientWidth') - PAGINATORS_WIDTH;

      var needPagination = tabsWidth && TAB_MIN_WIDTH * tabsCtrl.count() > tabsWidth;
      var paginationToggled = needPagination !== state.active;

      // If the md-tabs element is not displayed, then do nothing.
      if ( tabsWidth <= 0 ) {
        needPagination = false;
        paginationToggled = true;
      }

      state.active = needPagination;

      if (needPagination) {

        state.pagesCount = Math.ceil((TAB_MIN_WIDTH * tabsCtrl.count()) / tabsWidth);
        state.itemsPerPage = Math.max(1, Math.floor(tabsCtrl.count() / state.pagesCount));
        state.tabWidth = tabsWidth / state.itemsPerPage;
        
        tabsParent.css('width', state.tabWidth * tabsCtrl.count() + 'px');
        tabs.css('width', state.tabWidth + 'px');

        var selectedTabPage = getPageForTab(tabsCtrl.selected());
        setPage(selectedTabPage);

      } else {

        if (paginationToggled) {
          $timeout(function() {
            tabsParent.css('width', '');
            tabs.css('width', '');
            slideTabButtons(0);
            state.page = -1;
          });
        }

      }
    }

    function slideTabButtons(x) {
      if (tabsCtrl.pagingOffset === x) {
        // Resolve instantly if no change
        return $$q.when();
      }

      var deferred = $$q.defer();

      tabsCtrl.$$pagingOffset = x;
      tabsParent.css($mdEffects.TRANSFORM, 'translate3d(' + x + 'px,0,0)');
      tabsParent.on($mdEffects.TRANSITIONEND_EVENT, onTabsParentTransitionEnd);

      return deferred.promise;

      function onTabsParentTransitionEnd(ev) {
        // Make sure this event didn't bubble up from an animation in a child element.
        if (ev.target === tabsParent[0]) {
          tabsParent.off($mdEffects.TRANSITIONEND_EVENT, onTabsParentTransitionEnd);
          deferred.resolve();
        }
      }
    }

    function getPageForTab(tab) {
      var tabIndex = tabsCtrl.indexOf(tab);
      if (tabIndex === -1) return 0;

      return Math.floor(tabIndex / state.itemsPerPage);
    }

    function setPage(page) {
      if (page === state.page) return;

      var lastPage = state.pagesCount;

      if (page < 0) page = 0;
      if (page > lastPage) page = lastPage;

      state.hasPrev = page > 0;
      state.hasNext = ((page + 1) * state.itemsPerPage) < tabsCtrl.count();

      state.page = page;

      $timeout(function() {
        scope.$broadcast('$mdTabsPaginationChanged');
      });

      return slideTabButtons(-page * state.itemsPerPage * state.tabWidth);
    }
  }

}
})();

(function() {

angular.module('material.components.tabs')

.controller('$mdTab', [
  '$scope',
  '$element',
  '$compile',
  '$animate',
  '$mdUtil',
  TabItemController
]);

function TabItemController(scope, element, $compile, $animate, $mdUtil) {
  var self = this;

  // Properties
  self.contentContainer = angular.element('<div class="md-tab-content ng-hide">');
  self.hammertime = Hammer(self.contentContainer[0]);
  self.element = element;

  // Methods
  self.isDisabled = isDisabled;
  self.onAdd = onAdd;
  self.onRemove = onRemove;
  self.onSelect = onSelect;
  self.onDeselect = onDeselect;

  function isDisabled() {
    return element[0].hasAttribute('disabled');
  }
  
  /**
   * Add the tab's content to the DOM container area in the tabs,
   * @param contentArea the contentArea to add the content of the tab to
   */
  function onAdd(contentArea) {
    if (self.content.length) {
      self.contentContainer.append(self.content);
      self.contentScope = scope.$parent.$new();
      contentArea.append(self.contentContainer);

      $compile(self.contentContainer)(self.contentScope);
      $mdUtil.disconnectScope(self.contentScope);
    }
  }

  function onRemove() {
    self.hammertime.destroy();
    $animate.leave(self.contentContainer).then(function() {
      self.contentScope && self.contentScope.$destroy();
      self.contentScope = null;
    });
  }

  function onSelect() {
    // Resume watchers and events firing when tab is selected
    $mdUtil.reconnectScope(self.contentScope);
    self.hammertime.on('swipeleft swiperight', scope.onSwipe);

    element.addClass('active');
    element.attr('aria-selected', true);
    element.attr('tabIndex', 0);
    $animate.removeClass(self.contentContainer, 'ng-hide');

    scope.onSelect();
  }

  function onDeselect() {
    // Stop watchers & events from firing while tab is deselected
    $mdUtil.disconnectScope(self.contentScope);
    self.hammertime.off('swipeleft swiperight', scope.onSwipe);

    element.removeClass('active');
    element.attr('aria-selected', false);
    // Only allow tabbing to the active tab
    element.attr('tabIndex', -1);
    $animate.addClass(self.contentContainer, 'ng-hide');

    scope.onDeselect();
  }

}

})();

(function() {
angular.module('material.components.tabs')

.directive('mdTab', [
  '$mdInkRipple',
  '$compile',
  '$mdAria',
  '$mdUtil',
  '$mdConstant',
  MdTabDirective
]);

/**
 * @ngdoc directive
 * @name mdTab
 * @module material.components.tabs
 *
 * @restrict E
 *
 * @description
 * `<md-tab>` is the nested directive used [within `<md-tabs>`] to specify each tab with a **label** and optional *view content*.
 *
 * If the `label` attribute is not specified, then an optional `<md-tab-label>` tag can be used to specified more
 * complex tab header markup. If neither the **label** nor the **md-tab-label** are specified, then the nested
 * markup of the `<md-tab>` is used as the tab header markup.
 *
 * If a tab **label** has been identified, then any **non-**`<md-tab-label>` markup
 * will be considered tab content and will be transcluded to the internal `<div class="md-tabs-content">` container.
 *
 * This container is used by the TabsController to show/hide the active tab's content view. This synchronization is
 * automatically managed by the internal TabsController whenever the tab selection changes. Selection changes can
 * be initiated via data binding changes, programmatic invocation, or user gestures.
 *
 * @param {string=} label Optional attribute to specify a simple string as the tab label
 * @param {boolean=} active When evaluteing to true, selects the tab.
 * @param {boolean=} disabled If present, disabled tab selection.
 * @param {expression=} deselected Expression to be evaluated after the tab has been de-selected.
 * @param {expression=} selected Expression to be evaluated after the tab has been selected.
 *
 *
 * @usage
 *
 * <hljs lang="html">
 * <md-tab label="" disabled="" selected="" deselected="" >
 *   <h3>My Tab content</h3>
 * </md-tab>
 *
 * <md-tab >
 *   <md-tab-label>
 *     <h3>My Tab content</h3>
 *   </md-tab-label>
 *   <p>
 *     Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium,
 *     totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae
 *     dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit,
 *     sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
 *   </p>
 * </md-tab>
 * </hljs>
 *
 */
function MdTabDirective($mdInkRipple, $compile, $mdAria, $mdUtil, $mdConstant) {
  return {
    restrict: 'E',
    require: ['mdTab', '^mdTabs'],
    controller: '$mdTab',
    scope: {
      onSelect: '&',
      onDeselect: '&',
      label: '@'
    },
    compile: compile
  };

  function compile(element, attr) {
    var tabLabel = element.find('md-tab-label');

    if (tabLabel.length) {
      // If a tab label element is found, remove it for later re-use.
      tabLabel.remove();

    } else if (angular.isDefined(attr.label)) {
      // Otherwise, try to use attr.label as the label
      tabLabel = angular.element('<md-tab-label>').html(attr.label);

    } else {
      // If nothing is found, use the tab's content as the label
      tabLabel = angular.element('<md-tab-label>')
                        .append(element.contents().remove());
    }

    // Everything that's left as a child is the tab's content.
    var tabContent = element.contents().remove();

    return function postLink(scope, element, attr, ctrls) {

      var tabItemCtrl = ctrls[0]; // Controller for THIS tabItemCtrl
      var tabsCtrl = ctrls[1]; // Controller for ALL tabs

      transcludeTabContent();
      configureAria();

      var detachRippleFn = $mdInkRipple.attachButtonBehavior(element);
      tabsCtrl.add(tabItemCtrl);
      scope.$on('$destroy', function() {
        detachRippleFn();
        tabsCtrl.remove(tabItemCtrl);
      });

      if (!angular.isDefined(attr.ngClick)) {
        element.on('click', defaultClickListener);
      }
      element.on('keydown', keydownListener);
      scope.onSwipe = onSwipe;

      if (angular.isNumber(scope.$parent.$index)) {
        watchNgRepeatIndex();
      }
      if (angular.isDefined(attr.active)) {
        watchActiveAttribute();
      }
      watchDisabled();

      function transcludeTabContent() {
        // Clone the label we found earlier, and $compile and append it
        var label = tabLabel.clone();
        element.append(label);
        $compile(label)(scope.$parent);

        // Clone the content we found earlier, and mark it for later placement into
        // the proper content area.
        tabItemCtrl.content = tabContent.clone();
      }

      //defaultClickListener isn't applied if the user provides an ngClick expression.
      function defaultClickListener() {
        scope.$apply(function() {
          tabsCtrl.select(tabItemCtrl);
          tabItemCtrl.element.focus();
        });
      }
      function keydownListener(ev) {
        if (ev.keyCode == $mdConstant.KEY_CODE.SPACE || ev.keyCode == $mdConstant.KEY_CODE.ENTER ) {
          // Fire the click handler to do normal selection if space is pressed
          element.triggerHandler('click');
          ev.preventDefault();

        } else if (ev.keyCode === $mdConstant.KEY_CODE.LEFT_ARROW) {
          var previous = tabsCtrl.previous(tabItemCtrl);
          previous && previous.element.focus();

        } else if (ev.keyCode === $mdConstant.KEY_CODE.RIGHT_ARROW) {
          var next = tabsCtrl.next(tabItemCtrl);
          next && next.element.focus();
        }
      }

      function onSwipe(ev) {
        scope.$apply(function() {
          if (ev.type === 'swipeleft') {
            tabsCtrl.select(tabsCtrl.next());
          } else {
            tabsCtrl.select(tabsCtrl.previous());
          }
        });
      }

      // If tabItemCtrl is part of an ngRepeat, move the tabItemCtrl in our internal array
      // when its $index changes
      function watchNgRepeatIndex() {
        // The tabItemCtrl has an isolate scope, so we watch the $index on the parent.
        scope.$watch('$parent.$index', function $indexWatchAction(newIndex) {
          tabsCtrl.move(tabItemCtrl, newIndex);
        });
      }

      function watchActiveAttribute() {
        var unwatch = scope.$parent.$watch('!!(' + attr.active + ')', activeWatchAction);
        scope.$on('$destroy', unwatch);
        
        function activeWatchAction(isActive) {
          var isSelected = tabsCtrl.selected() === tabItemCtrl;

          if (isActive && !isSelected) {
            tabsCtrl.select(tabItemCtrl);
          } else if (!isActive && isSelected) {
            tabsCtrl.deselect(tabItemCtrl);
          }
        }
      }

      function watchDisabled() {
        scope.$watch(tabItemCtrl.isDisabled, disabledWatchAction);
        
        function disabledWatchAction(isDisabled) {
          element.attr('aria-disabled', isDisabled);

          // Auto select `next` tab when disabled
          var isSelected = (tabsCtrl.selected() === tabItemCtrl);
          if (isSelected && isDisabled) {
            tabsCtrl.select(tabsCtrl.next() || tabsCtrl.previous());
          }

        }
      }

      function configureAria() {
        // Link together the content area and tabItemCtrl with an id
        var tabId = attr.id || ('tab_' + $mdUtil.nextUid());

        element.attr({
          id: tabId,
          role: 'tab',
          tabIndex: -1 //this is also set on select/deselect in tabItemCtrl
        });

        // Only setup the contentContainer's aria attributes if tab content is provided
        if (tabContent.length) {
          var tabContentId = 'content_' + tabId;
          if (!element.attr('aria-controls')) {
            element.attr('aria-controls', tabContentId);
          }
          tabItemCtrl.contentContainer.attr({
            id: tabContentId,
            role: 'tabpanel',
            'aria-labelledby': tabId
          });
        }
      }

    };

  }

}

})();

(function() {
angular.module('material.components.tabs')

.controller('$mdTabs', [
  '$scope', 
  '$element',
  '$mdUtil',
  MdTabsController
]);

function MdTabsController(scope, element, $mdUtil) {

  var tabsList = $mdUtil.iterator([], false);
  var self = this;

  // Properties
  self.element = element;
  // The section containing the tab content elements
  self.contentArea = angular.element(element[0].querySelector('.md-tabs-content'));

  // Methods from iterator
  self.inRange = tabsList.inRange;
  self.indexOf = tabsList.indexOf;
  self.itemAt = tabsList.itemAt;
  self.count = tabsList.count;
  
  self.selected = selected;
  self.add = add;
  self.remove = remove;
  self.move = move;
  self.select = select;
  self.deselect = deselect;

  self.next = next;
  self.previous = previous;

  scope.$on('$destroy', function() {
    self.deselect(self.selected());
    for (var i = tabsList.count() - 1; i >= 0; i--) {
      self.remove(tabsList[i], true);
    }
  });

  // Get the selected tab
  function selected() {
    return self.itemAt(scope.selectedIndex);
  }

  // Add a new tab.
  // Returns a method to remove the tab from the list.
  function add(tab, index) {

    tabsList.add(tab, index);
    tab.onAdd(self.contentArea);

    // Select the new tab if we don't have a selectedIndex, or if the
    // selectedIndex we've been waiting for is this tab
    if (scope.selectedIndex === -1 || !angular.isNumber(scope.selectedIndex) || 
        scope.selectedIndex === self.indexOf(tab)) {
      self.select(tab);
    }
    scope.$broadcast('$mdTabsChanged');
  }

  function remove(tab, noReselect) {
    if (!tabsList.contains(tab)) return;

    if (noReselect) {
      // do nothing
    } else if (self.selected() === tab) {
      if (tabsList.count() > 1) {
        self.select(self.previous() || self.next());
      } else {
        self.deselect(tab);
      }
    }

    tabsList.remove(tab);
    tab.onRemove();

    scope.$broadcast('$mdTabsChanged');
  }

  // Move a tab (used when ng-repeat order changes)
  function move(tab, toIndex) {
    var isSelected = self.selected() === tab;

    tabsList.remove(tab);
    tabsList.add(tab, toIndex);
    if (isSelected) self.select(tab);

    scope.$broadcast('$mdTabsChanged');
  }

  function select(tab) {
    if (!tab || tab.isSelected || tab.isDisabled()) return;
    if (!tabsList.contains(tab)) return;

    self.deselect(self.selected());

    scope.selectedIndex = self.indexOf(tab);
    tab.isSelected = true;
    tab.onSelect();
  }

  function deselect(tab) {
    if (!tab || !tab.isSelected) return;
    if (!tabsList.contains(tab)) return;

    scope.selectedIndex = -1;
    tab.isSelected = false;
    tab.onDeselect();
  }

  function next(tab, filterFn) {
    return tabsList.next(tab || self.selected(), filterFn || isTabEnabled);
  }
  function previous(tab, filterFn) {
    return tabsList.previous(tab || self.selected(), filterFn || isTabEnabled);
  }

  function isTabEnabled(tab) {
    return tab && !tab.isDisabled();
  }

}
})();

(function() {
angular.module('material.components.tabs')

/**
 * @ngdoc directive
 * @name mdTabs
 * @module material.components.tabs
 *
 * @restrict E
 *
 * @description
 * The `<md-tabs>` directive serves as the container for 1..n `<md-tab>` child directives to produces a Tabs components.
 * In turn, the nested `<md-tab>` directive is used to specify a tab label for the **header button** and a [optional] tab view
 * content that will be associated with each tab button.
 *
 * Below is the markup for its simplest usage:
 *
 *  <hljs lang="html">
 *  <md-tabs>
 *    <md-tab label="Tab #1"></md-tab>
 *    <md-tab label="Tab #2"></md-tab>
 *    <md-tab label="Tab #3"></md-tab>
 *  <md-tabs>
 *  </hljs>
 *
 * Tabs supports three (3) usage scenarios:
 *
 *  1. Tabs (buttons only)
 *  2. Tabs with internal view content
 *  3. Tabs with external view content
 *
 * **Tab-only** support is useful when tab buttons are used for custom navigation regardless of any other components, content, or views.
 * **Tabs with internal views** are the traditional usages where each tab has associated view content and the view switching is managed internally by the Tabs component.
 * **Tabs with external view content** is often useful when content associated with each tab is independently managed and data-binding notifications announce tab selection changes.
 *
 * > As a performance bonus, if the tab content is managed internally then the non-active (non-visible) tab contents are temporarily disconnected from the `$scope.$digest()` processes; which restricts and optimizes DOM updates to only the currently active tab.
 *
 * Additional features also include:
 *
 * *  Content can include any markup.
 * *  If a tab is disabled while active/selected, then the next tab will be auto-selected.
 * *  If the currently active tab is the last tab, then next() action will select the first tab.
 * *  Any markup (other than **`<md-tab>`** tags) will be transcluded into the tab header area BEFORE the tab buttons.
 *
 * @param {integer=} selected Index of the active/selected tab
 * @param {boolean=} noink If present, disables ink ripple effects.
 * @param {boolean=} nobar If present, disables the selection ink bar.
 * @param {string=}  align-tabs Attribute to indicate position of tab buttons: bottom or top; default is `top`
 *
 * @usage
 * <hljs lang="html">
 * <md-tabs selected="selectedIndex" >
 *   <img ng-src="/img/angular.png" class="centered">
 *
 *   <md-tab
 *      ng-repeat="tab in tabs | orderBy:predicate:reversed"
 *      on-select="onTabSelected(tab)"
 *      on-deselect="announceDeselected(tab)"
 *      disabled="tab.disabled" >
 *
 *       <md-tab-label>
 *           {{tab.title}}
 *           <img src="/img/removeTab.png"
 *                ng-click="removeTab(tab)"
 *                class="delete" >
 *       </md-tab-label>
 *
 *       {{tab.content}}
 *
 *   </md-tab>
 *
 * </md-tabs>
 * </hljs>
 *
 */
.directive('mdTabs', [
  '$parse',
  '$mdTheming',
  TabsDirective
]);

function TabsDirective($parse, $mdTheming) {
  return {
    restrict: 'E',
    controller: '$mdTabs',
    require: 'mdTabs',
    transclude: true,
    scope: {
      selectedIndex: '=?selected'
    },
    template:
      '<section class="md-header" ' +
        'ng-class="{\'md-paginating\': pagination.active}">' +

        '<button class="md-paginator md-prev" ' +
          'ng-if="pagination.active && pagination.hasPrev" ' +
          'ng-click="pagination.clickPrevious()" ' +
          'aria-hidden="true">' +
        '</button>' +

        // overflow: hidden container when paginating
        '<div class="md-header-items-container" md-tabs-pagination>' +
          // flex container for <md-tab> elements
          '<div class="md-header-items" ng-transclude></div>' +
          '<md-tabs-ink-bar></md-tabs-ink-bar>' +
        '</div>' +

        '<button class="md-paginator md-next" ' +
          'ng-if="pagination.active && pagination.hasNext" ' +
          'ng-click="pagination.clickNext()" ' +
          'aria-hidden="true">' +
        '</button>' +

      '</section>' +
      '<section class="md-tabs-content"></section>',
    link: postLink
  };

  function postLink(scope, element, attr, tabsCtrl) {
    $mdTheming(element);
    configureAria();
    watchSelected();

    function configureAria() {
      element.attr({
        role: 'tablist'
      });
    }

    function watchSelected() {
      scope.$watch('selectedIndex', function watchSelectedIndex(newIndex, oldIndex) {
        // Note: if the user provides an invalid newIndex, all tabs will be deselected
        // and the associated view will be hidden.
        tabsCtrl.deselect( tabsCtrl.itemAt(oldIndex) );

        if (tabsCtrl.inRange(newIndex)) {
          var newTab = tabsCtrl.itemAt(newIndex);

          // If the newTab is disabled, find an enabled one to go to.
          if (newTab && newTab.isDisabled()) {
            newTab = newIndex > oldIndex ?
              tabsCtrl.next(newTab) :
              tabsCtrl.previous(newTab);
          }
          tabsCtrl.select(newTab);

        }
      });
    }

  }
}
})();
/*!
 * Angular Material Design
 * https://github.com/angular/material
 * @license MIT
 * v0.5.1
 */
*, *:before, *:after {
  box-sizing: border-box; }

:focus {
  outline: none; }

html, body {
  height: 100%;
  color: rgba(0, 0, 0, 0.73);
  background: #ffffff;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  -webkit-touch-callout: none;
  -webkit-text-size-adjust: 100%;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility; }
  html p, body p {
    line-height: 1.846; }
  html h3, body h3 {
    display: block;
    -webkit-margin-before: 1em;
    -webkit-margin-after: 1em;
    -webkit-margin-start: 0px;
    -webkit-margin-end: 0px;
    font-size: 1.17em;
    font-weight: bold; }

button, select, html, textarea, input {
  font-family: 'RobotoDraft', 'Helvetica Neue', Helvetica, Arial; }

body {
  margin: 0;
  padding: 0;
  outline: none; }

.inset {
  padding: 10px; }

button {
  font-family: 'RobotoDraft', 'Helvetica Neue', Helvetica, Arial; }

a {
  background: transparent;
  outline: none; }

h1 {
  font-size: 2em;
  margin: 0.67em 0; }

h2 {
  font-size: 1.5em;
  margin: 0.83em 0; }

h3 {
  font-size: 1.17em;
  margin: 1em 0; }

h4 {
  font-size: 1em;
  margin: 1.33em 0; }

h5 {
  font-size: 0.83em;
  margin: 1.67em 0; }

h6 {
  font-size: 0.75em;
  margin: 2.33em 0; }

select, button, textarea, input {
  margin: 0;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline; }

input[type="reset"], input[type="submit"], html input[type="button"], button {
  cursor: pointer;
  -webkit-appearance: button; }
  input[type="reset"][disabled], input[type="submit"][disabled], html input[type="button"][disabled], button[disabled] {
    cursor: default; }

textarea {
  vertical-align: top;
  overflow: auto; }

input[type="radio"], input[type="checkbox"] {
  padding: 0;
  box-sizing: border-box; }
input[type="search"] {
  -webkit-appearance: textfield;
  box-sizing: content-box;
  -webkit-box-sizing: content-box; }
  input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button {
    -webkit-appearance: none; }

@font-face {
  font-family: 'RobotoDraft';
  font-style: normal;
  font-weight: 100;
  src: local('RobotoDraft Thin'), local('RobotoDraft-Thin'), url(//fonts.gstatic.com/s/robotodraft/v1/hope9NW9iJ5hh8P5PM_EAyeJLMOzE6CCkidNEpZOseY.woff) format('woff'); }

@font-face {
  font-family: 'RobotoDraft';
  font-style: normal;
  font-weight: 300;
  src: local('RobotoDraft Light'), local('RobotoDraft-Light'), url(//fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwR_xHqYgAV9Bl_ZQbYUxnQU.woff) format('woff'); }

@font-face {
  font-family: 'RobotoDraft';
  font-style: normal;
  font-weight: 400;
  src: local('RobotoDraft'), local('RobotoDraft-Regular'), url(//fonts.gstatic.com/s/robotodraft/v1/0xES5Sl_v6oyT7dAKuoni4bN6UDyHWBl620a-IRfuBk.woff) format('woff'); }

@font-face {
  font-family: 'RobotoDraft';
  font-style: normal;
  font-weight: 500;
  src: local('RobotoDraft Medium'), local('RobotoDraft-Medium'), url(//fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwSqHEX2q--o2so14pIEl08w.woff) format('woff'); }

@font-face {
  font-family: 'RobotoDraft';
  font-style: normal;
  font-weight: 700;
  src: local('RobotoDraft Bold'), local('RobotoDraft-Bold'), url(//fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwTqR_3kx9_hJXbbyU8S6IN0.woff) format('woff'); }

@font-face {
  font-family: 'RobotoDraft';
  font-style: normal;
  font-weight: 900;
  src: local('RobotoDraft Black'), local('RobotoDraft-Black'), url(//fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwUExzZ44ka2Lr5i-x5aWr0E.woff) format('woff'); }

@font-face {
  font-family: 'RobotoDraft';
  font-style: italic;
  font-weight: 400;
  src: local('RobotoDraft Italic'), local('RobotoDraft-Italic'), url(//fonts.gstatic.com/s/robotodraft/v1/er-TIW55l9KWsTS1x9bTftkZXW4sYc4BjuAIFc1SXII.woff) format('woff'); }

@font-face {
  font-family: 'RobotoDraft';
  font-style: italic;
  font-weight: 700;
  src: local('RobotoDraft Bold Italic'), local('RobotoDraft-BoldItalic'), url(//fonts.gstatic.com/s/robotodraft/v1/5SAvdU0uYYlH8OURAykt5wRV2F9RPTaqyJ4QibDfkzM.woff) format('woff'); }

.md-shadow {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  border-radius: inherit;
  pointer-events: none; }

.md-shadow-bottom-z-1, .md-button.md-raised:not([disabled]), .md-button.md-fab {
  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); }

.md-shadow-bottom-z-2, .md-button.md-raised:not([disabled]):focus, .md-button.md-raised:not([disabled]):hover, .md-button.md-fab:not([disabled]):focus, .md-button.md-fab:not([disabled]):hover {
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.4); }

.md-shadow-animated.md-shadow {
  transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1); }

[layout] {
  box-sizing: border-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex; }

[layout=vertical] {
  -webkit-flex-direction: column;
      -ms-flex-direction: column;
          flex-direction: column; }

[layout-padding], [layout][layout-padding] > [flex] {
  padding: 8px; }

[layout-padding] + [layout-padding] {
  margin-top: -8px;
  padding-top: 0; }

[layout-fill] {
  margin: 0;
  min-height: 100%;
  width: 100%; }

[layout-align="center"], [layout-align="center center"], [layout-align="center start"], [layout-align="center end"] {
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center; }

[layout-align="end"], [layout-align="end center"], [layout-align="end start"], [layout-align="end end"] {
  -webkit-justify-content: flex-end;
      -ms-flex-pack: end;
          justify-content: flex-end; }

[layout-align="space-around"], [layout-align="space-around center"], [layout-align="space-around start"], [layout-align="space-around end"] {
  -webkit-justify-content: space-around;
      -ms-flex-pack: distribute;
          justify-content: space-around; }

[layout-align="space-between"], [layout-align="space-between center"], [layout-align="space-between start"], [layout-align="space-between end"] {
  -webkit-justify-content: space-between;
      -ms-flex-pack: justify;
          justify-content: space-between; }

[layout-align="center center"], [layout-align="start center"], [layout-align="end center"], [layout-align="space-between center"], [layout-align="space-around center"] {
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center; }

[layout-align="center start"], [layout-align="start start"], [layout-align="end start"], [layout-align="space-between start"], [layout-align="space-around start"] {
  -webkit-align-items: flex-start;
      -ms-flex-align: start;
          align-items: flex-start; }

[layout-align="center end"], [layout-align="start end"], [layout-align="end end"], [layout-align="space-between end"], [layout-align="space-around end"] {
  -webkit-align-items: flex-end;
      -ms-flex-align: end;
          align-items: flex-end; }

[block] {
  display: block; }

[inline-block] {
  display: inline-block; }

[hide] {
  display: none; }

[show] {
  display: inherit; }

[flex] {
  -webkit-flex: 1;
      -ms-flex: 1;
          flex: 1; }

[flex="5"] {
  -webkit-flex: 0 0 5%;
      -ms-flex: 0 0 5%;
          flex: 0 0 5%;
  max-width: 5%; }

[flex="10"] {
  -webkit-flex: 0 0 10%;
      -ms-flex: 0 0 10%;
          flex: 0 0 10%;
  max-width: 10%; }

[flex="15"] {
  -webkit-flex: 0 0 15%;
      -ms-flex: 0 0 15%;
          flex: 0 0 15%;
  max-width: 15%; }

[flex="20"] {
  -webkit-flex: 0 0 20%;
      -ms-flex: 0 0 20%;
          flex: 0 0 20%;
  max-width: 20%; }

[flex="25"] {
  -webkit-flex: 0 0 25%;
      -ms-flex: 0 0 25%;
          flex: 0 0 25%;
  max-width: 25%; }

[flex="30"] {
  -webkit-flex: 0 0 30%;
      -ms-flex: 0 0 30%;
          flex: 0 0 30%;
  max-width: 30%; }

[flex="35"] {
  -webkit-flex: 0 0 35%;
      -ms-flex: 0 0 35%;
          flex: 0 0 35%;
  max-width: 35%; }

[flex="40"] {
  -webkit-flex: 0 0 40%;
      -ms-flex: 0 0 40%;
          flex: 0 0 40%;
  max-width: 40%; }

[flex="45"] {
  -webkit-flex: 0 0 45%;
      -ms-flex: 0 0 45%;
          flex: 0 0 45%;
  max-width: 45%; }

[flex="50"] {
  -webkit-flex: 0 0 50%;
      -ms-flex: 0 0 50%;
          flex: 0 0 50%;
  max-width: 50%; }

[flex="55"] {
  -webkit-flex: 0 0 55%;
      -ms-flex: 0 0 55%;
          flex: 0 0 55%;
  max-width: 55%; }

[flex="60"] {
  -webkit-flex: 0 0 60%;
      -ms-flex: 0 0 60%;
          flex: 0 0 60%;
  max-width: 60%; }

[flex="65"] {
  -webkit-flex: 0 0 65%;
      -ms-flex: 0 0 65%;
          flex: 0 0 65%;
  max-width: 65%; }

[flex="70"] {
  -webkit-flex: 0 0 70%;
      -ms-flex: 0 0 70%;
          flex: 0 0 70%;
  max-width: 70%; }

[flex="75"] {
  -webkit-flex: 0 0 75%;
      -ms-flex: 0 0 75%;
          flex: 0 0 75%;
  max-width: 75%; }

[flex="80"] {
  -webkit-flex: 0 0 80%;
      -ms-flex: 0 0 80%;
          flex: 0 0 80%;
  max-width: 80%; }

[flex="85"] {
  -webkit-flex: 0 0 85%;
      -ms-flex: 0 0 85%;
          flex: 0 0 85%;
  max-width: 85%; }

[flex="90"] {
  -webkit-flex: 0 0 90%;
      -ms-flex: 0 0 90%;
          flex: 0 0 90%;
  max-width: 90%; }

[flex="95"] {
  -webkit-flex: 0 0 95%;
      -ms-flex: 0 0 95%;
          flex: 0 0 95%;
  max-width: 95%; }

[flex="33"], [flex="34"] {
  -webkit-flex: 0 0 33.33%;
      -ms-flex: 0 0 33.33%;
          flex: 0 0 33.33%;
  max-width: 33.33%; }

[flex="66"], [flex="67"] {
  -webkit-flex: 0 0 66.66%;
      -ms-flex: 0 0 66.66%;
          flex: 0 0 66.66%;
  max-width: 66.66%; }

[offset="5"] {
  margin-left: 5%; }

[offset="10"] {
  margin-left: 10%; }

[offset="15"] {
  margin-left: 15%; }

[offset="20"] {
  margin-left: 20%; }

[offset="25"] {
  margin-left: 25%; }

[offset="30"] {
  margin-left: 30%; }

[offset="35"] {
  margin-left: 35%; }

[offset="40"] {
  margin-left: 40%; }

[offset="45"] {
  margin-left: 45%; }

[offset="50"] {
  margin-left: 50%; }

[offset="55"] {
  margin-left: 55%; }

[offset="60"] {
  margin-left: 60%; }

[offset="65"] {
  margin-left: 65%; }

[offset="70"] {
  margin-left: 70%; }

[offset="75"] {
  margin-left: 75%; }

[offset="80"] {
  margin-left: 80%; }

[offset="85"] {
  margin-left: 85%; }

[offset="90"] {
  margin-left: 90%; }

[offset="95"] {
  margin-left: 95%; }

[offset="33"], [offset="34"] {
  margin-left: 33.33%; }

[offset="66"], [offset="67"] {
  margin-left: 66.66%; }

[layout-order="1"] {
  -webkit-order: 1;
      -ms-flex-order: 1;
          order: 1; }

[layout-order="2"] {
  -webkit-order: 2;
      -ms-flex-order: 2;
          order: 2; }

[layout-order="3"] {
  -webkit-order: 3;
      -ms-flex-order: 3;
          order: 3; }

[layout-order="4"] {
  -webkit-order: 4;
      -ms-flex-order: 4;
          order: 4; }

[layout-order="5"] {
  -webkit-order: 5;
      -ms-flex-order: 5;
          order: 5; }

[layout-order="6"] {
  -webkit-order: 6;
      -ms-flex-order: 6;
          order: 6; }

@media (min-width: 600px) {
  [flex-sm] {
    -webkit-flex: 1;
        -ms-flex: 1;
            flex: 1; }

  [flex-sm="5"] {
    -webkit-flex: 0 0 5%;
        -ms-flex: 0 0 5%;
            flex: 0 0 5%;
    max-width: 5%; }

  [flex-sm="10"] {
    -webkit-flex: 0 0 10%;
        -ms-flex: 0 0 10%;
            flex: 0 0 10%;
    max-width: 10%; }

  [flex-sm="15"] {
    -webkit-flex: 0 0 15%;
        -ms-flex: 0 0 15%;
            flex: 0 0 15%;
    max-width: 15%; }

  [flex-sm="20"] {
    -webkit-flex: 0 0 20%;
        -ms-flex: 0 0 20%;
            flex: 0 0 20%;
    max-width: 20%; }

  [flex-sm="25"] {
    -webkit-flex: 0 0 25%;
        -ms-flex: 0 0 25%;
            flex: 0 0 25%;
    max-width: 25%; }

  [flex-sm="30"] {
    -webkit-flex: 0 0 30%;
        -ms-flex: 0 0 30%;
            flex: 0 0 30%;
    max-width: 30%; }

  [flex-sm="35"] {
    -webkit-flex: 0 0 35%;
        -ms-flex: 0 0 35%;
            flex: 0 0 35%;
    max-width: 35%; }

  [flex-sm="40"] {
    -webkit-flex: 0 0 40%;
        -ms-flex: 0 0 40%;
            flex: 0 0 40%;
    max-width: 40%; }

  [flex-sm="45"] {
    -webkit-flex: 0 0 45%;
        -ms-flex: 0 0 45%;
            flex: 0 0 45%;
    max-width: 45%; }

  [flex-sm="50"] {
    -webkit-flex: 0 0 50%;
        -ms-flex: 0 0 50%;
            flex: 0 0 50%;
    max-width: 50%; }

  [flex-sm="55"] {
    -webkit-flex: 0 0 55%;
        -ms-flex: 0 0 55%;
            flex: 0 0 55%;
    max-width: 55%; }

  [flex-sm="60"] {
    -webkit-flex: 0 0 60%;
        -ms-flex: 0 0 60%;
            flex: 0 0 60%;
    max-width: 60%; }

  [flex-sm="65"] {
    -webkit-flex: 0 0 65%;
        -ms-flex: 0 0 65%;
            flex: 0 0 65%;
    max-width: 65%; }

  [flex-sm="70"] {
    -webkit-flex: 0 0 70%;
        -ms-flex: 0 0 70%;
            flex: 0 0 70%;
    max-width: 70%; }

  [flex-sm="75"] {
    -webkit-flex: 0 0 75%;
        -ms-flex: 0 0 75%;
            flex: 0 0 75%;
    max-width: 75%; }

  [flex-sm="80"] {
    -webkit-flex: 0 0 80%;
        -ms-flex: 0 0 80%;
            flex: 0 0 80%;
    max-width: 80%; }

  [flex-sm="85"] {
    -webkit-flex: 0 0 85%;
        -ms-flex: 0 0 85%;
            flex: 0 0 85%;
    max-width: 85%; }

  [flex-sm="90"] {
    -webkit-flex: 0 0 90%;
        -ms-flex: 0 0 90%;
            flex: 0 0 90%;
    max-width: 90%; }

  [flex-sm="95"] {
    -webkit-flex: 0 0 95%;
        -ms-flex: 0 0 95%;
            flex: 0 0 95%;
    max-width: 95%; }

  [flex-sm="33"], [flex-sm="34"] {
    -webkit-flex: 0 0 33.33%;
        -ms-flex: 0 0 33.33%;
            flex: 0 0 33.33%;
    max-width: 33.33%; }

  [flex-sm="66"], [flex-sm="67"] {
    -webkit-flex: 0 0 66.66%;
        -ms-flex: 0 0 66.66%;
            flex: 0 0 66.66%;
    max-width: 66.66%; }

  [offset-sm="5"] {
    margin-left: 5%; }

  [offset-sm="10"] {
    margin-left: 10%; }

  [offset-sm="15"] {
    margin-left: 15%; }

  [offset-sm="20"] {
    margin-left: 20%; }

  [offset-sm="25"] {
    margin-left: 25%; }

  [offset-sm="30"] {
    margin-left: 30%; }

  [offset-sm="35"] {
    margin-left: 35%; }

  [offset-sm="40"] {
    margin-left: 40%; }

  [offset-sm="45"] {
    margin-left: 45%; }

  [offset-sm="50"] {
    margin-left: 50%; }

  [offset-sm="55"] {
    margin-left: 55%; }

  [offset-sm="60"] {
    margin-left: 60%; }

  [offset-sm="65"] {
    margin-left: 65%; }

  [offset-sm="70"] {
    margin-left: 70%; }

  [offset-sm="75"] {
    margin-left: 75%; }

  [offset-sm="80"] {
    margin-left: 80%; }

  [offset-sm="85"] {
    margin-left: 85%; }

  [offset-sm="90"] {
    margin-left: 90%; }

  [offset-sm="95"] {
    margin-left: 95%; }

  [offset-sm="33"], [offset-sm="34"] {
    margin-left: 33.33%; }

  [offset-sm="66"], [offset-sm="67"] {
    margin-left: 66.66%; }

  [layout-order-sm="1"] {
    -webkit-order: 1;
        -ms-flex-order: 1;
            order: 1; }

  [layout-order-sm="2"] {
    -webkit-order: 2;
        -ms-flex-order: 2;
            order: 2; }

  [layout-order-sm="3"] {
    -webkit-order: 3;
        -ms-flex-order: 3;
            order: 3; }

  [layout-order-sm="4"] {
    -webkit-order: 4;
        -ms-flex-order: 4;
            order: 4; }

  [layout-order-sm="5"] {
    -webkit-order: 5;
        -ms-flex-order: 5;
            order: 5; }

  [layout-order-sm="6"] {
    -webkit-order: 6;
        -ms-flex-order: 6;
            order: 6; }

  [layout-sm] {
    -webkit-flex-direction: row;
        -ms-flex-direction: row;
            flex-direction: row; }

  [layout-sm=vertical] {
    -webkit-flex-direction: column;
        -ms-flex-direction: column;
            flex-direction: column; }

  [block-sm] {
    display: block; }

  [inline-block-sm] {
    display: inline-block; }

  [show-sm] {
    display: inherit; }

  [hide-sm] {
    display: none; }
 }

@media (min-width: 960px) {
  [flex-md] {
    -webkit-flex: 1;
        -ms-flex: 1;
            flex: 1; }

  [flex-md="5"] {
    -webkit-flex: 0 0 5%;
        -ms-flex: 0 0 5%;
            flex: 0 0 5%;
    max-width: 5%; }

  [flex-md="10"] {
    -webkit-flex: 0 0 10%;
        -ms-flex: 0 0 10%;
            flex: 0 0 10%;
    max-width: 10%; }

  [flex-md="15"] {
    -webkit-flex: 0 0 15%;
        -ms-flex: 0 0 15%;
            flex: 0 0 15%;
    max-width: 15%; }

  [flex-md="20"] {
    -webkit-flex: 0 0 20%;
        -ms-flex: 0 0 20%;
            flex: 0 0 20%;
    max-width: 20%; }

  [flex-md="25"] {
    -webkit-flex: 0 0 25%;
        -ms-flex: 0 0 25%;
            flex: 0 0 25%;
    max-width: 25%; }

  [flex-md="30"] {
    -webkit-flex: 0 0 30%;
        -ms-flex: 0 0 30%;
            flex: 0 0 30%;
    max-width: 30%; }

  [flex-md="35"] {
    -webkit-flex: 0 0 35%;
        -ms-flex: 0 0 35%;
            flex: 0 0 35%;
    max-width: 35%; }

  [flex-md="40"] {
    -webkit-flex: 0 0 40%;
        -ms-flex: 0 0 40%;
            flex: 0 0 40%;
    max-width: 40%; }

  [flex-md="45"] {
    -webkit-flex: 0 0 45%;
        -ms-flex: 0 0 45%;
            flex: 0 0 45%;
    max-width: 45%; }

  [flex-md="50"] {
    -webkit-flex: 0 0 50%;
        -ms-flex: 0 0 50%;
            flex: 0 0 50%;
    max-width: 50%; }

  [flex-md="55"] {
    -webkit-flex: 0 0 55%;
        -ms-flex: 0 0 55%;
            flex: 0 0 55%;
    max-width: 55%; }

  [flex-md="60"] {
    -webkit-flex: 0 0 60%;
        -ms-flex: 0 0 60%;
            flex: 0 0 60%;
    max-width: 60%; }

  [flex-md="65"] {
    -webkit-flex: 0 0 65%;
        -ms-flex: 0 0 65%;
            flex: 0 0 65%;
    max-width: 65%; }

  [flex-md="70"] {
    -webkit-flex: 0 0 70%;
        -ms-flex: 0 0 70%;
            flex: 0 0 70%;
    max-width: 70%; }

  [flex-md="75"] {
    -webkit-flex: 0 0 75%;
        -ms-flex: 0 0 75%;
            flex: 0 0 75%;
    max-width: 75%; }

  [flex-md="80"] {
    -webkit-flex: 0 0 80%;
        -ms-flex: 0 0 80%;
            flex: 0 0 80%;
    max-width: 80%; }

  [flex-md="85"] {
    -webkit-flex: 0 0 85%;
        -ms-flex: 0 0 85%;
            flex: 0 0 85%;
    max-width: 85%; }

  [flex-md="90"] {
    -webkit-flex: 0 0 90%;
        -ms-flex: 0 0 90%;
            flex: 0 0 90%;
    max-width: 90%; }

  [flex-md="95"] {
    -webkit-flex: 0 0 95%;
        -ms-flex: 0 0 95%;
            flex: 0 0 95%;
    max-width: 95%; }

  [flex-md="33"], [flex-md="34"] {
    -webkit-flex: 0 0 33.33%;
        -ms-flex: 0 0 33.33%;
            flex: 0 0 33.33%;
    max-width: 33.33%; }

  [flex-md="66"], [flex-md="67"] {
    -webkit-flex: 0 0 66.66%;
        -ms-flex: 0 0 66.66%;
            flex: 0 0 66.66%;
    max-width: 66.66%; }

  [offset-md="5"] {
    margin-left: 5%; }

  [offset-md="10"] {
    margin-left: 10%; }

  [offset-md="15"] {
    margin-left: 15%; }

  [offset-md="20"] {
    margin-left: 20%; }

  [offset-md="25"] {
    margin-left: 25%; }

  [offset-md="30"] {
    margin-left: 30%; }

  [offset-md="35"] {
    margin-left: 35%; }

  [offset-md="40"] {
    margin-left: 40%; }

  [offset-md="45"] {
    margin-left: 45%; }

  [offset-md="50"] {
    margin-left: 50%; }

  [offset-md="55"] {
    margin-left: 55%; }

  [offset-md="60"] {
    margin-left: 60%; }

  [offset-md="65"] {
    margin-left: 65%; }

  [offset-md="70"] {
    margin-left: 70%; }

  [offset-md="75"] {
    margin-left: 75%; }

  [offset-md="80"] {
    margin-left: 80%; }

  [offset-md="85"] {
    margin-left: 85%; }

  [offset-md="90"] {
    margin-left: 90%; }

  [offset-md="95"] {
    margin-left: 95%; }

  [offset-md="33"], [offset-md="34"] {
    margin-left: 33.33%; }

  [offset-md="66"], [offset-md="67"] {
    margin-left: 66.66%; }

  [layout-order-md="1"] {
    -webkit-order: 1;
        -ms-flex-order: 1;
            order: 1; }

  [layout-order-md="2"] {
    -webkit-order: 2;
        -ms-flex-order: 2;
            order: 2; }

  [layout-order-md="3"] {
    -webkit-order: 3;
        -ms-flex-order: 3;
            order: 3; }

  [layout-order-md="4"] {
    -webkit-order: 4;
        -ms-flex-order: 4;
            order: 4; }

  [layout-order-md="5"] {
    -webkit-order: 5;
        -ms-flex-order: 5;
            order: 5; }

  [layout-order-md="6"] {
    -webkit-order: 6;
        -ms-flex-order: 6;
            order: 6; }

  [layout-md] {
    -webkit-flex-direction: row;
        -ms-flex-direction: row;
            flex-direction: row; }

  [layout-md=vertical] {
    -webkit-flex-direction: column;
        -ms-flex-direction: column;
            flex-direction: column; }

  [block-md] {
    display: block; }

  [inline-block-md] {
    display: inline-block; }

  [show-md] {
    display: inherit; }

  [hide-md] {
    display: none; }
 }

@media (min-width: 1200px) {
  [flex-lg] {
    -webkit-flex: 1;
        -ms-flex: 1;
            flex: 1; }

  [flex-lg="5"] {
    -webkit-flex: 0 0 5%;
        -ms-flex: 0 0 5%;
            flex: 0 0 5%;
    max-width: 5%; }

  [flex-lg="10"] {
    -webkit-flex: 0 0 10%;
        -ms-flex: 0 0 10%;
            flex: 0 0 10%;
    max-width: 10%; }

  [flex-lg="15"] {
    -webkit-flex: 0 0 15%;
        -ms-flex: 0 0 15%;
            flex: 0 0 15%;
    max-width: 15%; }

  [flex-lg="20"] {
    -webkit-flex: 0 0 20%;
        -ms-flex: 0 0 20%;
            flex: 0 0 20%;
    max-width: 20%; }

  [flex-lg="25"] {
    -webkit-flex: 0 0 25%;
        -ms-flex: 0 0 25%;
            flex: 0 0 25%;
    max-width: 25%; }

  [flex-lg="30"] {
    -webkit-flex: 0 0 30%;
        -ms-flex: 0 0 30%;
            flex: 0 0 30%;
    max-width: 30%; }

  [flex-lg="35"] {
    -webkit-flex: 0 0 35%;
        -ms-flex: 0 0 35%;
            flex: 0 0 35%;
    max-width: 35%; }

  [flex-lg="40"] {
    -webkit-flex: 0 0 40%;
        -ms-flex: 0 0 40%;
            flex: 0 0 40%;
    max-width: 40%; }

  [flex-lg="45"] {
    -webkit-flex: 0 0 45%;
        -ms-flex: 0 0 45%;
            flex: 0 0 45%;
    max-width: 45%; }

  [flex-lg="50"] {
    -webkit-flex: 0 0 50%;
        -ms-flex: 0 0 50%;
            flex: 0 0 50%;
    max-width: 50%; }

  [flex-lg="55"] {
    -webkit-flex: 0 0 55%;
        -ms-flex: 0 0 55%;
            flex: 0 0 55%;
    max-width: 55%; }

  [flex-lg="60"] {
    -webkit-flex: 0 0 60%;
        -ms-flex: 0 0 60%;
            flex: 0 0 60%;
    max-width: 60%; }

  [flex-lg="65"] {
    -webkit-flex: 0 0 65%;
        -ms-flex: 0 0 65%;
            flex: 0 0 65%;
    max-width: 65%; }

  [flex-lg="70"] {
    -webkit-flex: 0 0 70%;
        -ms-flex: 0 0 70%;
            flex: 0 0 70%;
    max-width: 70%; }

  [flex-lg="75"] {
    -webkit-flex: 0 0 75%;
        -ms-flex: 0 0 75%;
            flex: 0 0 75%;
    max-width: 75%; }

  [flex-lg="80"] {
    -webkit-flex: 0 0 80%;
        -ms-flex: 0 0 80%;
            flex: 0 0 80%;
    max-width: 80%; }

  [flex-lg="85"] {
    -webkit-flex: 0 0 85%;
        -ms-flex: 0 0 85%;
            flex: 0 0 85%;
    max-width: 85%; }

  [flex-lg="90"] {
    -webkit-flex: 0 0 90%;
        -ms-flex: 0 0 90%;
            flex: 0 0 90%;
    max-width: 90%; }

  [flex-lg="95"] {
    -webkit-flex: 0 0 95%;
        -ms-flex: 0 0 95%;
            flex: 0 0 95%;
    max-width: 95%; }

  [flex-lg="33"], [flex-lg="34"] {
    -webkit-flex: 0 0 33.33%;
        -ms-flex: 0 0 33.33%;
            flex: 0 0 33.33%;
    max-width: 33.33%; }

  [flex-lg="66"], [flex-lg="67"] {
    -webkit-flex: 0 0 66.66%;
        -ms-flex: 0 0 66.66%;
            flex: 0 0 66.66%;
    max-width: 66.66%; }

  [offset-lg="5"] {
    margin-left: 5%; }

  [offset-lg="10"] {
    margin-left: 10%; }

  [offset-lg="15"] {
    margin-left: 15%; }

  [offset-lg="20"] {
    margin-left: 20%; }

  [offset-lg="25"] {
    margin-left: 25%; }

  [offset-lg="30"] {
    margin-left: 30%; }

  [offset-lg="35"] {
    margin-left: 35%; }

  [offset-lg="40"] {
    margin-left: 40%; }

  [offset-lg="45"] {
    margin-left: 45%; }

  [offset-lg="50"] {
    margin-left: 50%; }

  [offset-lg="55"] {
    margin-left: 55%; }

  [offset-lg="60"] {
    margin-left: 60%; }

  [offset-lg="65"] {
    margin-left: 65%; }

  [offset-lg="70"] {
    margin-left: 70%; }

  [offset-lg="75"] {
    margin-left: 75%; }

  [offset-lg="80"] {
    margin-left: 80%; }

  [offset-lg="85"] {
    margin-left: 85%; }

  [offset-lg="90"] {
    margin-left: 90%; }

  [offset-lg="95"] {
    margin-left: 95%; }

  [offset-lg="33"], [offset-lg="34"] {
    margin-left: 33.33%; }

  [offset-lg="66"], [offset-lg="67"] {
    margin-left: 66.66%; }

  [layout-order-lg="1"] {
    -webkit-order: 1;
        -ms-flex-order: 1;
            order: 1; }

  [layout-order-lg="2"] {
    -webkit-order: 2;
        -ms-flex-order: 2;
            order: 2; }

  [layout-order-lg="3"] {
    -webkit-order: 3;
        -ms-flex-order: 3;
            order: 3; }

  [layout-order-lg="4"] {
    -webkit-order: 4;
        -ms-flex-order: 4;
            order: 4; }

  [layout-order-lg="5"] {
    -webkit-order: 5;
        -ms-flex-order: 5;
            order: 5; }

  [layout-order-lg="6"] {
    -webkit-order: 6;
        -ms-flex-order: 6;
            order: 6; }

  [layout-lg] {
    -webkit-flex-direction: row;
        -ms-flex-direction: row;
            flex-direction: row; }

  [layout-lg=vertical] {
    -webkit-flex-direction: column;
        -ms-flex-direction: column;
            flex-direction: column; }

  [block-lg] {
    display: block; }

  [inline-block-lg] {
    display: inline-block; }

  [show-lg] {
    display: inherit; }

  [hide-lg] {
    display: none; }
 }

@-webkit-keyframes inkRippleButton {
  0% {
    -webkit-transform: scale(0);
            transform: scale(0);
    opacity: 0.15; }

  50% {
    -webkit-transform: scale(0.75);
            transform: scale(0.75);
    opacity: 0.15; }

  100% {
    -webkit-transform: scale(2);
            transform: scale(2);
    opacity: 0; } }

@keyframes inkRippleButton {
  0% {
    -webkit-transform: scale(0);
            transform: scale(0);
    opacity: 0.15; }

  50% {
    -webkit-transform: scale(0.75);
            transform: scale(0.75);
    opacity: 0.15; }

  100% {
    -webkit-transform: scale(2);
            transform: scale(2);
    opacity: 0; } }

@-webkit-keyframes inkRippleCheckbox {
  0% {
    -webkit-transform: scale(0);
            transform: scale(0);
    opacity: 0.4; }

  50% {
    -webkit-transform: scale(1);
            transform: scale(1);
    opacity: 0.4; }

  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
    opacity: 0; } }

@keyframes inkRippleCheckbox {
  0% {
    -webkit-transform: scale(0);
            transform: scale(0);
    opacity: 0.4; }

  50% {
    -webkit-transform: scale(1);
            transform: scale(1);
    opacity: 0.4; }

  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
    opacity: 0; } }

/*
 * A container inside of a rippling element (eg a button),
 * which contains all of the individual ripples
 */
.md-ripple-container {
  pointer-events: none;
  position: absolute;
  overflow: hidden;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%; }

.md-ripple {
  position: absolute; }

md-backdrop {
  z-index: 5;
  background-color: rgba(0, 0, 0, 0);
  position: fixed;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  transition: all 0.2s ease-out; }
  md-backdrop.ng-enter {
    transition-delay: 0.1s; }
  md-backdrop.ng-enter, md-backdrop.ng-leave.ng-leave-active {
    opacity: 0; }
  md-backdrop.ng-leave, md-backdrop.ng-enter.ng-enter-active {
    opacity: 1; }

md-bottom-sheet {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 8px 16px 88px 16px;
  z-index: 8;
  border-top: 1px solid;
  -webkit-transform: translate3d(0, 80px, 0);
          transform: translate3d(0, 80px, 0);
  transition: 0.2s linear;
  transition-property: -webkit-transform;
  transition-property: transform; }
  md-bottom-sheet.md-has-header {
    padding-top: 0; }
  md-bottom-sheet.ng-enter {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
            transform: translate3d(0, 100%, 0); }
  md-bottom-sheet.ng-enter-active {
    opacity: 1;
    display: block;
    -webkit-transform: translate3d(0, 80px, 0) !important;
            transform: translate3d(0, 80px, 0) !important; }
  md-bottom-sheet.ng-leave-active {
    -webkit-transform: translate3d(0, 100%, 0) !important;
            transform: translate3d(0, 100%, 0) !important; }
  md-bottom-sheet .md-subheader {
    background-color: transparent;
    font-family: 'RobotoDraft', 'Helvetica Neue', Helvetica, Arial;
    line-height: 56px;
    padding: 0;
    white-space: nowrap; }
  md-bottom-sheet md-inline-icon {
    display: inline-block;
    height: 24px;
    width: 24px;
    fill: #444; }
  md-bottom-sheet md-item {
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    outline: none; }
    md-bottom-sheet md-item:hover {
      cursor: pointer; }
  md-bottom-sheet.md-list md-item {
    -webkit-align-items: center;
        -ms-flex-align: center;
            align-items: center;
    height: 48px; }
    md-bottom-sheet.md-list md-item div.md-icon-container {
      display: inline-block;
      height: 24px;
      margin-right: 32px; }
  md-bottom-sheet.md-grid {
    padding-left: 24px;
    padding-right: 24px;
    padding-top: 0; }
    md-bottom-sheet.md-grid md-list {
      display: -webkit-flex;
      display: -ms-flexbox;
      display: flex;
      -webkit-flex-direction: row;
          -ms-flex-direction: row;
              flex-direction: row;
      -webkit-flex-wrap: wrap;
          -ms-flex-wrap: wrap;
              flex-wrap: wrap;
      transition: all 0.5s;
      -webkit-align-items: center;
          -ms-flex-align: center;
              align-items: center; }
    md-bottom-sheet.md-grid md-item {
      -webkit-flex-direction: column;
          -ms-flex-direction: column;
              flex-direction: column;
      -webkit-align-items: center;
          -ms-flex-align: center;
              align-items: center;
      transition: all 0.5s;
      height: 96px;
      margin-top: 8px;
      margin-bottom: 8px;
      /* Mixin for how many grid items to show per row */ }
      @media screen and (max-width: 600px) {
        md-bottom-sheet.md-grid md-item {
          -webkit-flex: 1 1 33.33333%;
              -ms-flex: 1 1 33.33333%;
                  flex: 1 1 33.33333%;
          max-width: 33.33333%; }
          md-bottom-sheet.md-grid md-item:nth-of-type(3n+1) {
            -webkit-align-items: flex-start;
                -ms-flex-align: start;
                    align-items: flex-start; }
          md-bottom-sheet.md-grid md-item:nth-of-type(3n) {
            -webkit-align-items: flex-end;
                -ms-flex-align: end;
                    align-items: flex-end; } }
      @media screen and (min-width: 600px) and (max-width: 960px) {
        md-bottom-sheet.md-grid md-item {
          -webkit-flex: 1 1 25%;
              -ms-flex: 1 1 25%;
                  flex: 1 1 25%;
          max-width: 25%; } }
      @media screen and (min-width: 960px) and (max-width: 1200px) {
        md-bottom-sheet.md-grid md-item {
          -webkit-flex: 1 1 16.66667%;
              -ms-flex: 1 1 16.66667%;
                  flex: 1 1 16.66667%;
          max-width: 16.66667%; } }
      @media screen and (min-width: 1200px) {
        md-bottom-sheet.md-grid md-item {
          -webkit-flex: 1 1 14.28571%;
              -ms-flex: 1 1 14.28571%;
                  flex: 1 1 14.28571%;
          max-width: 14.28571%; } }
      md-bottom-sheet.md-grid md-item .md-item-content {
        display: -webkit-flex;
        display: -ms-flexbox;
        display: flex;
        -webkit-flex-direction: column;
            -ms-flex-direction: column;
                flex-direction: column;
        -webkit-align-items: center;
            -ms-flex-align: center;
                align-items: center;
        width: 48px;
        padding-bottom: 16px; }
      md-bottom-sheet.md-grid md-item .md-grid-item-content {
        display: -webkit-flex;
        display: -ms-flexbox;
        display: flex;
        -webkit-flex-direction: column;
            -ms-flex-direction: column;
                flex-direction: column;
        -webkit-align-items: center;
            -ms-flex-align: center;
                align-items: center;
        width: 80px; }
      md-bottom-sheet.md-grid md-item .md-icon-container {
        display: inline-block;
        box-sizing: border-box;
        height: 48px;
        width: 48px;
        margin: 0 0; }
      md-bottom-sheet.md-grid md-item p.md-grid-text {
        font-weight: 300;
        line-height: 16px;
        font-size: 13px;
        margin: 0;
        white-space: nowrap;
        width: 64px;
        text-align: center;
        padding-top: 8px; }

/**
 * Position a FAB button.
 */
.md-button {
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  position: relative;
  display: inline-block;
  outline: none;
  border: 0;
  padding: 6px;
  margin: 0;
  background: transparent;
  white-space: nowrap;
  text-align: center;
  text-transform: uppercase;
  font-weight: inherit;
  font-style: inherit;
  font-variant: inherit;
  font-size: inherit;
  font-family: inherit;
  line-height: inherit;
  text-decoration: none;
  cursor: pointer;
  overflow: hidden; }
  .md-button.md-cornered {
    border-radius: 0; }
  .md-button.md-icon {
    padding: 0;
    background: none; }
  .md-button.md-raised {
    transition: 0.2s linear;
    transition-property: box-shadow, -webkit-transform, background-color;
    transition-property: box-shadow, transform, background-color;
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0); }
  .md-button.md-fab {
    z-index: 2;
    width: 56px;
    height: 56px;
    border-radius: 50%;
    border-radius: 50%;
    overflow: hidden;
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
    transition: 0.2s linear;
    transition-property: -webkit-transform, box-shadow;
    transition-property: transform, box-shadow; }
    .md-button.md-fab.md-fab-bottom-right {
      top: auto;
      right: 28px;
      bottom: 28px;
      left: auto;
      position: absolute; }
    .md-button.md-fab.md-fab-bottom-left {
      top: auto;
      right: auto;
      bottom: 28px;
      left: 28px;
      position: absolute; }
    .md-button.md-fab.md-fab-top-right {
      top: 28px;
      right: 28px;
      bottom: auto;
      left: auto;
      position: absolute; }
    .md-button.md-fab.md-fab-top-left {
      top: 28px;
      right: auto;
      bottom: auto;
      left: 28px;
      position: absolute; }
  .md-button:not([disabled]).md-raised:focus, .md-button:not([disabled]).md-raised:hover, .md-button:not([disabled]).md-fab:focus, .md-button:not([disabled]).md-fab:hover {
    -webkit-transform: translate3d(0, -1px, 0);
            transform: translate3d(0, -1px, 0); }

.md-toast-open-top .md-button.md-fab-top-left, .md-toast-open-top .md-button.md-fab-top-right {
  -webkit-transform: translate3d(0, 32px, 0);
          transform: translate3d(0, 32px, 0); }
  .md-toast-open-top .md-button.md-fab-top-left:not([disabled]):focus, .md-toast-open-top .md-button.md-fab-top-left:not([disabled]):hover, .md-toast-open-top .md-button.md-fab-top-right:not([disabled]):focus, .md-toast-open-top .md-button.md-fab-top-right:not([disabled]):hover {
    -webkit-transform: translate3d(0, 31px, 0);
            transform: translate3d(0, 31px, 0); }

.md-toast-open-bottom .md-button.md-fab-bottom-left, .md-toast-open-bottom .md-button.md-fab-bottom-right {
  -webkit-transform: translate3d(0, -32px, 0);
          transform: translate3d(0, -32px, 0); }
  .md-toast-open-bottom .md-button.md-fab-bottom-left:not([disabled]):focus, .md-toast-open-bottom .md-button.md-fab-bottom-left:not([disabled]):hover, .md-toast-open-bottom .md-button.md-fab-bottom-right:not([disabled]):focus, .md-toast-open-bottom .md-button.md-fab-bottom-right:not([disabled]):hover {
    -webkit-transform: translate3d(0, -33px, 0);
            transform: translate3d(0, -33px, 0); }

.md-button-group {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex: 1;
      -ms-flex: 1;
          flex: 1;
  width: 100%; }

.md-button-group > .md-button {
  -webkit-flex: 1;
      -ms-flex: 1;
          flex: 1;
  display: block;
  overflow: hidden;
  width: 0;
  border-width: 1px 0px 1px 1px;
  border-radius: 0;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap; }
  .md-button-group > .md-button:first-child {
    border-radius: 2px 0px 0px 2px; }
  .md-button-group > .md-button:last-child {
    border-right-width: 1px;
    border-radius: 0px 2px 2px 0px; }

md-card {
  display: block;
  box-sizing: border-box;
  box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.26);
  margin: 8px;
  padding: 8px; }
  md-card .md-card-image {
    display: block;
    width: 100%; }

md-checkbox {
  display: block;
  margin: 15px;
  white-space: nowrap;
  cursor: pointer;
  outline: none; }
  md-checkbox .md-container {
    position: relative;
    top: 4px;
    display: inline-block;
    width: 18px;
    height: 18px; }
    md-checkbox .md-container .md-ripple-container {
      position: absolute;
      display: block;
      width: 54px;
      height: 54px;
      left: -18px;
      top: -18px; }
  md-checkbox .md-icon {
    transition: 240ms;
    position: absolute;
    top: 0;
    left: 0;
    width: 18px;
    height: 18px;
    border: 2px solid;
    border-radius: 2px; }
  md-checkbox.md-checked .md-icon {
    border: none; }
  md-checkbox[disabled] {
    cursor: no-drop; }
  md-checkbox:focus .md-label {
    border-color: black; }
  md-checkbox.md-checked .md-icon:after {
    -webkit-transform: rotate(45deg);
            transform: rotate(45deg);
    position: absolute;
    left: 6px;
    top: 2px;
    display: table;
    width: 6px;
    height: 12px;
    border: 2px solid;
    border-top: 0;
    border-left: 0;
    content: ' '; }
  md-checkbox .md-label {
    border: 1px dotted transparent;
    position: relative;
    display: inline-block;
    margin-left: 10px;
    vertical-align: middle;
    white-space: normal;
    pointer-events: none; }

md-content {
  display: block;
  position: relative;
  overflow: auto;
  -webkit-overflow-scrolling: touch; }
  md-content[scroll-y] {
    overflow-y: auto;
    overflow-x: hidden; }
  md-content[scroll-x] {
    overflow-x: auto;
    overflow-y: hidden; }
  md-content.md-padding {
    padding: 8px; }

@media (min-width: 600px) {
  md-content.md-padding {
    padding: 16px; }
 }

.md-dialog-container {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0;
  z-index: 10; }
  .md-dialog-container.md-active {
    transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
    -webkit-transform: translate3d(0, 0, 0) scale(1);
            transform: translate3d(0, 0, 0) scale(1);
    opacity: 1; }
  .md-dialog-container.ng-leave.ng-leave-active {
    -webkit-transform: translate3d(0, 100%, 0) scale(0.5);
            transform: translate3d(0, 100%, 0) scale(0.5);
    opacity: 0; }

md-dialog {
  min-width: 240px;
  max-width: 80%;
  max-height: 80%;
  margin: auto;
  position: relative;
  box-shadow: 0px 27px 24px 0 rgba(0, 0, 0, 0.2);
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-direction: column;
      -ms-flex-direction: column;
          flex-direction: column; }
  md-dialog md-content {
    -webkit-order: 1;
        -ms-flex-order: 1;
            order: 1;
    padding: 24px;
    overflow: auto;
    -webkit-overflow-scrolling: touch; }
    md-dialog md-content *:first-child {
      margin-top: 0px; }
  md-dialog .md-actions {
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-order: 2;
        -ms-flex-order: 2;
            order: 2;
    box-sizing: border-box;
    -webkit-align-items: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-justify-content: flex-end;
        -ms-flex-pack: end;
            justify-content: flex-end;
    padding: 16px 16px;
    min-height: 40px; }
    md-dialog .md-actions > * {
      margin-left: 8px; }
  md-dialog.md-content-overflow .md-actions {
    border-top: 1px solid; }

md-divider {
  display: block;
  border-top: 1px solid;
  margin: 0; }
  md-divider[inset] {
    margin-left: 80px; }

md-icon {
  margin: auto;
  padding: 0;
  display: inline-block;
  margin-top: 5px;
  background-repeat: no-repeat no-repeat;
  pointer-events: none; }

svg, object {
  fill: currentColor;
  color: currentColor; }

md-list {
  padding: 8px 0px 8px 0px; }

md-item-content {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-flex-direction: row;
      -ms-flex-direction: row;
          flex-direction: row;
  box-sizing: border-box;
  position: relative;
  padding: 0px 0px 0px 0px; }

/**
 * The left tile for a list item.
 */
.md-tile-left {
  min-width: 56px;
  margin-right: -16px; }

/**
 * The center content tile for a list item.
 */
.md-tile-content {
  -webkit-flex: 1;
      -ms-flex: 1;
          flex: 1;
  padding: 16px;
  text-overflow: ellipsis; }
  .md-tile-content h3 {
    margin: 0 0 3px 0;
    font-weight: 400;
    font-size: 1.1em; }
  .md-tile-content h4 {
    margin: 0 0 3px 0;
    font-weight: 400;
    font-size: 0.9em; }
  .md-tile-content p {
    margin: 0 0 3px 0;
    font-size: 0.75em; }

/**
 * The right tile for a list item.
 */
.md-tile-right {
  padding-right: 0px; }

md-progress-circular {
  display: block;
  width: 54px;
  height: 54px;
  border-radius: 50%;
  padding: 3px; }
  md-progress-circular .md-wrapper1, md-progress-circular .md-wrapper2 {
    width: 48px;
    height: 48px;
    position: absolute;
    border-radius: 50%; }
  md-progress-circular .md-circle .md-mask, md-progress-circular .md-circle .md-fill, md-progress-circular .md-circle .md-shadow {
    width: 48px;
    height: 48px;
    position: absolute;
    border-radius: 50%; }
  md-progress-circular .md-circle .md-mask, md-progress-circular .md-circle .md-fill {
    -webkit-backface-visibility: hidden;
            backface-visibility: hidden;
    transition: -webkit-transform 0.3s;
    transition: transform 0.3s; }
  md-progress-circular .md-circle .md-mask {
    clip: rect(0px, 48px, 48px, 24px); }
    md-progress-circular .md-circle .md-mask .md-fill {
      clip: rect(0px, 24px, 48px, 0px); }
  md-progress-circular .md-inset {
    width: 36px;
    height: 36px;
    position: absolute;
    margin-left: 6px;
    margin-top: 6px;
    border-radius: 50%; }
  md-progress-circular[mode=indeterminate] .md-wrapper1, md-progress-circular[mode=indeterminate] .md-wrapper2 {
    -webkit-transform-origin: 50% 50%;
            transform-origin: 50% 50%; }
  md-progress-circular[mode=indeterminate] .md-wrapper1 {
    -webkit-animation: indeterminate_rotate1 3s infinite linear;
            animation: indeterminate_rotate1 3s infinite linear; }
  md-progress-circular[mode=indeterminate] .md-wrapper2 {
    -webkit-animation: indeterminate_rotate2 1.5s infinite linear;
            animation: indeterminate_rotate2 1.5s infinite linear; }
  md-progress-circular[mode=indeterminate] .md-fill, md-progress-circular[mode=indeterminate] .md-mask.md-full {
    -webkit-animation: indeterminate_size_fill 1.5s infinite linear;
            animation: indeterminate_size_fill 1.5s infinite linear; }
  md-progress-circular[mode=indeterminate] .md-fill.md-fix {
    -webkit-animation: indeterminate_size_fix 1.5s infinite linear;
            animation: indeterminate_size_fix 1.5s infinite linear; }

@-webkit-keyframes indeterminate_rotate1 {
  0% {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg); }

  100% {
    -webkit-transform: rotate(360deg);
            transform: rotate(360deg); } }

@keyframes indeterminate_rotate1 {
  0% {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg); }

  100% {
    -webkit-transform: rotate(360deg);
            transform: rotate(360deg); } }

@-webkit-keyframes indeterminate_rotate2 {
  0% {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg); }

  70% {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg); }

  100% {
    -webkit-transform: rotate(360deg);
            transform: rotate(360deg); } }

@keyframes indeterminate_rotate2 {
  0% {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg); }

  70% {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg); }

  100% {
    -webkit-transform: rotate(360deg);
            transform: rotate(360deg); } }

@-webkit-keyframes indeterminate_size_fill {
  0% {
    -webkit-transform: rotate(5deg);
            transform: rotate(5deg); }

  10% {
    -webkit-transform: rotate(5deg);
            transform: rotate(5deg); }

  50% {
    -webkit-transform: rotate(135deg);
            transform: rotate(135deg); }

  70% {
    -webkit-transform: rotate(135deg);
            transform: rotate(135deg); }

  100% {
    -webkit-transform: rotate(5deg);
            transform: rotate(5deg); } }

@keyframes indeterminate_size_fill {
  0% {
    -webkit-transform: rotate(5deg);
            transform: rotate(5deg); }

  10% {
    -webkit-transform: rotate(5deg);
            transform: rotate(5deg); }

  50% {
    -webkit-transform: rotate(135deg);
            transform: rotate(135deg); }

  70% {
    -webkit-transform: rotate(135deg);
            transform: rotate(135deg); }

  100% {
    -webkit-transform: rotate(5deg);
            transform: rotate(5deg); } }

@-webkit-keyframes indeterminate_size_fix {
  0% {
    -webkit-transform: rotate(10deg);
            transform: rotate(10deg); }

  10% {
    -webkit-transform: rotate(10deg);
            transform: rotate(10deg); }

  50% {
    -webkit-transform: rotate(270deg);
            transform: rotate(270deg); }

  70% {
    -webkit-transform: rotate(270deg);
            transform: rotate(270deg); }

  100% {
    -webkit-transform: rotate(10deg);
            transform: rotate(10deg); } }

@keyframes indeterminate_size_fix {
  0% {
    -webkit-transform: rotate(10deg);
            transform: rotate(10deg); }

  10% {
    -webkit-transform: rotate(10deg);
            transform: rotate(10deg); }

  50% {
    -webkit-transform: rotate(270deg);
            transform: rotate(270deg); }

  70% {
    -webkit-transform: rotate(270deg);
            transform: rotate(270deg); }

  100% {
    -webkit-transform: rotate(10deg);
            transform: rotate(10deg); } }

md-progress-linear {
  display: block;
  width: 100%;
  height: 5px; }
  md-progress-linear .md-container {
    overflow: hidden;
    position: relative;
    height: 5px;
    top: 5px;
    -webkit-transform: translate(0, 5px) scale(1, 0);
            transform: translate(0, 5px) scale(1, 0);
    transition: all 0.3s linear; }
  md-progress-linear .md-container.md-ready {
    -webkit-transform: translate(0, 0) scale(1, 1);
            transform: translate(0, 0) scale(1, 1); }
  md-progress-linear .md-bar {
    height: 5px;
    position: absolute;
    width: 100%; }
  md-progress-linear .md-bar1, md-progress-linear .md-bar2 {
    transition: all 0.2s linear; }
  md-progress-linear[mode=determinate] .md-bar1 {
    display: none; }
  md-progress-linear[mode=indeterminate] .md-bar1 {
    -webkit-animation: indeterminate1 4s infinite linear;
            animation: indeterminate1 4s infinite linear; }
  md-progress-linear[mode=indeterminate] .md-bar2 {
    -webkit-animation: indeterminate2 4s infinite linear;
            animation: indeterminate2 4s infinite linear; }
  md-progress-linear[mode=buffer] .md-container {
    background-color: transparent !important; }
  md-progress-linear[mode=buffer] .md-dashed:before {
    content: "";
    display: block;
    height: 5px;
    width: 100%;
    margin-top: 0px;
    position: absolute;
    background-color: transparent;
    background-size: 10px 10px !important;
    background-position: 0px -23px;
    -webkit-animation: buffer 3s infinite linear;
            animation: buffer 3s infinite linear; }
  md-progress-linear[mode=query] .md-bar2 {
    -webkit-animation: query 0.8s infinite cubic-bezier(0.39, 0.575, 0.565, 1);
            animation: query 0.8s infinite cubic-bezier(0.39, 0.575, 0.565, 1); }

@-webkit-keyframes indeterminate1 {
  0% {
    -webkit-transform: translateX(-25%) scale(0.5, 1);
            transform: translateX(-25%) scale(0.5, 1); }

  10% {
    -webkit-transform: translateX(25%) scale(0.5, 1);
            transform: translateX(25%) scale(0.5, 1); }

  19.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  20% {
    -webkit-transform: translateX(-37.5%) scale(0.25, 1);
            transform: translateX(-37.5%) scale(0.25, 1); }

  30% {
    -webkit-transform: translateX(37.5%) scale(0.25, 1);
            transform: translateX(37.5%) scale(0.25, 1); }

  34.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  36.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  37% {
    -webkit-transform: translateX(-37.5%) scale(0.25, 1);
            transform: translateX(-37.5%) scale(0.25, 1); }

  47% {
    -webkit-transform: translateX(20%) scale(0.25, 1);
            transform: translateX(20%) scale(0.25, 1); }

  52% {
    -webkit-transform: translateX(35%) scale(0.05, 1);
            transform: translateX(35%) scale(0.05, 1); }

  55% {
    -webkit-transform: translateX(35%) scale(0.1, 1);
            transform: translateX(35%) scale(0.1, 1); }

  58% {
    -webkit-transform: translateX(50%) scale(0.1, 1);
            transform: translateX(50%) scale(0.1, 1); }

  61.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  69.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  70% {
    -webkit-transform: translateX(-37.5%) scale(0.25, 1);
            transform: translateX(-37.5%) scale(0.25, 1); }

  80% {
    -webkit-transform: translateX(20%) scale(0.25, 1);
            transform: translateX(20%) scale(0.25, 1); }

  85% {
    -webkit-transform: translateX(35%) scale(0.05, 1);
            transform: translateX(35%) scale(0.05, 1); }

  88% {
    -webkit-transform: translateX(35%) scale(0.1, 1);
            transform: translateX(35%) scale(0.1, 1); }

  91% {
    -webkit-transform: translateX(50%) scale(0.1, 1);
            transform: translateX(50%) scale(0.1, 1); }

  92.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  93% {
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); }

  100% {
    -webkit-transform: translateX(-25%) scale(0.5, 1);
            transform: translateX(-25%) scale(0.5, 1); } }

@keyframes indeterminate1 {
  0% {
    -webkit-transform: translateX(-25%) scale(0.5, 1);
            transform: translateX(-25%) scale(0.5, 1); }

  10% {
    -webkit-transform: translateX(25%) scale(0.5, 1);
            transform: translateX(25%) scale(0.5, 1); }

  19.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  20% {
    -webkit-transform: translateX(-37.5%) scale(0.25, 1);
            transform: translateX(-37.5%) scale(0.25, 1); }

  30% {
    -webkit-transform: translateX(37.5%) scale(0.25, 1);
            transform: translateX(37.5%) scale(0.25, 1); }

  34.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  36.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  37% {
    -webkit-transform: translateX(-37.5%) scale(0.25, 1);
            transform: translateX(-37.5%) scale(0.25, 1); }

  47% {
    -webkit-transform: translateX(20%) scale(0.25, 1);
            transform: translateX(20%) scale(0.25, 1); }

  52% {
    -webkit-transform: translateX(35%) scale(0.05, 1);
            transform: translateX(35%) scale(0.05, 1); }

  55% {
    -webkit-transform: translateX(35%) scale(0.1, 1);
            transform: translateX(35%) scale(0.1, 1); }

  58% {
    -webkit-transform: translateX(50%) scale(0.1, 1);
            transform: translateX(50%) scale(0.1, 1); }

  61.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  69.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  70% {
    -webkit-transform: translateX(-37.5%) scale(0.25, 1);
            transform: translateX(-37.5%) scale(0.25, 1); }

  80% {
    -webkit-transform: translateX(20%) scale(0.25, 1);
            transform: translateX(20%) scale(0.25, 1); }

  85% {
    -webkit-transform: translateX(35%) scale(0.05, 1);
            transform: translateX(35%) scale(0.05, 1); }

  88% {
    -webkit-transform: translateX(35%) scale(0.1, 1);
            transform: translateX(35%) scale(0.1, 1); }

  91% {
    -webkit-transform: translateX(50%) scale(0.1, 1);
            transform: translateX(50%) scale(0.1, 1); }

  92.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  93% {
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); }

  100% {
    -webkit-transform: translateX(-25%) scale(0.5, 1);
            transform: translateX(-25%) scale(0.5, 1); } }

@-webkit-keyframes indeterminate2 {
  0% {
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); }

  25.99% {
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); }

  28% {
    -webkit-transform: translateX(-37.5%) scale(0.25, 1);
            transform: translateX(-37.5%) scale(0.25, 1); }

  38% {
    -webkit-transform: translateX(37.5%) scale(0.25, 1);
            transform: translateX(37.5%) scale(0.25, 1); }

  42.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  46.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  49.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  50% {
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); }

  60% {
    -webkit-transform: translateX(-25%) scale(0.5, 1);
            transform: translateX(-25%) scale(0.5, 1); }

  70% {
    -webkit-transform: translateX(25%) scale(0.5, 1);
            transform: translateX(25%) scale(0.5, 1); }

  79.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); } }

@keyframes indeterminate2 {
  0% {
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); }

  25.99% {
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); }

  28% {
    -webkit-transform: translateX(-37.5%) scale(0.25, 1);
            transform: translateX(-37.5%) scale(0.25, 1); }

  38% {
    -webkit-transform: translateX(37.5%) scale(0.25, 1);
            transform: translateX(37.5%) scale(0.25, 1); }

  42.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  46.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  49.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); }

  50% {
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); }

  60% {
    -webkit-transform: translateX(-25%) scale(0.5, 1);
            transform: translateX(-25%) scale(0.5, 1); }

  70% {
    -webkit-transform: translateX(25%) scale(0.5, 1);
            transform: translateX(25%) scale(0.5, 1); }

  79.99% {
    -webkit-transform: translateX(50%) scale(0, 1);
            transform: translateX(50%) scale(0, 1); } }

@-webkit-keyframes query {
  0% {
    opacity: 1;
    -webkit-transform: translateX(35%) scale(0.3, 1);
            transform: translateX(35%) scale(0.3, 1); }

  100% {
    opacity: 0;
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); } }

@keyframes query {
  0% {
    opacity: 1;
    -webkit-transform: translateX(35%) scale(0.3, 1);
            transform: translateX(35%) scale(0.3, 1); }

  100% {
    opacity: 0;
    -webkit-transform: translateX(-50%) scale(0, 1);
            transform: translateX(-50%) scale(0, 1); } }

@-webkit-keyframes buffer {
  0% {
    opacity: 1;
    background-position: 0px -23px; }

  50% {
    opacity: 0; }

  100% {
    opacity: 1;
    background-position: -200px -23px; } }

@keyframes buffer {
  0% {
    opacity: 1;
    background-position: 0px -23px; }

  50% {
    opacity: 0; }

  100% {
    opacity: 1;
    background-position: -200px -23px; } }

md-radio-button, .md-switch-thumb {
  display: block;
  margin: 15px;
  white-space: nowrap;
  cursor: pointer; }
  md-radio-button input, .md-switch-thumb input {
    display: none; }
  md-radio-button .md-container, .md-switch-thumb .md-container {
    position: relative;
    top: 4px;
    display: inline-block;
    width: 16px;
    height: 16px;
    cursor: pointer; }
    md-radio-button .md-container .md-ripple-container, .md-switch-thumb .md-container .md-ripple-container {
      position: absolute;
      display: block;
      width: 48px;
      height: 48px;
      left: -16px;
      top: -16px; }
  md-radio-button .md-off, .md-switch-thumb .md-off {
    position: absolute;
    top: 0px;
    left: 0px;
    width: 16px;
    height: 16px;
    border: solid 2px;
    border-radius: 50%;
    transition: border-color ease 0.28s; }
  md-radio-button .md-on, .md-switch-thumb .md-on {
    position: absolute;
    top: 0;
    left: 0;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    transition: -webkit-transform ease 0.28s;
    transition: transform ease 0.28s;
    -webkit-transform: scale(0);
            transform: scale(0); }
  md-radio-button.md-checked .md-on, .md-switch-thumb.md-checked .md-on {
    -webkit-transform: scale(0.55);
            transform: scale(0.55); }
  md-radio-button .md-label, .md-switch-thumb .md-label {
    position: relative;
    display: inline-block;
    margin-left: 10px;
    vertical-align: middle;
    white-space: normal;
    pointer-events: none;
    width: auto; }
  md-radio-button .circle, .md-switch-thumb .circle {
    border-radius: 50%; }

md-radio-group {
  border: 1px dotted transparent;
  display: block;
  outline: none; }

md-sidenav {
  position: absolute;
  width: 304px;
  bottom: 0;
  z-index: 6;
  background-color: white;
  overflow: auto; }
  md-sidenav.md-closed {
    display: none; }
  md-sidenav.md-closed-add, md-sidenav.md-closed-remove {
    display: block;
    /* this is required as of 1.3x to properly
       apply all styling in a show/hide animation */
    transition: 0s all; }
  md-sidenav.md-closed-add.md-closed-add-active, md-sidenav.md-closed-remove.md-closed-remove-active {
    transition: -webkit-transform 0.3s ease-in-out;
    transition: transform 0.3s ease-in-out; }
  md-sidenav.md-locked-open, md-sidenav.md-locked-open.md-closed, md-sidenav.md-locked-open.md-closed.md-sidenav-left, md-sidenav.md-locked-open.md-closed, md-sidenav.md-locked-open.md-closed.md-sidenav-right {
    position: static;
    display: block;
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0); }

.md-sidenav-backdrop.locked-open {
  display: none; }

.md-sidenav-left, md-sidenav {
  left: 0;
  top: 0;
  -webkit-transform: translate3d(0%, 0, 0);
          transform: translate3d(0%, 0, 0); }
  .md-sidenav-left.md-closed, md-sidenav.md-closed {
    -webkit-transform: translate3d(-100%, 0, 0);
            transform: translate3d(-100%, 0, 0); }

.md-sidenav-right {
  left: 100%;
  top: 0;
  -webkit-transform: translate3d(-100%, 0, 0);
          transform: translate3d(-100%, 0, 0); }
  .md-sidenav-right.md-closed {
    -webkit-transform: translate3d(0%, 0, 0);
            transform: translate3d(0%, 0, 0); }

@-webkit-keyframes sliderFocusThumb {
  0% {
    opacity: 0;
    -webkit-transform: scale(0);
            transform: scale(0); }

  50% {
    -webkit-transform: scale(1);
            transform: scale(1);
    opacity: 1; }

  100% {
    opacity: 0; } }

@keyframes sliderFocusThumb {
  0% {
    opacity: 0;
    -webkit-transform: scale(0);
            transform: scale(0); }

  50% {
    -webkit-transform: scale(1);
            transform: scale(1);
    opacity: 1; }

  100% {
    opacity: 0; } }

md-slider {
  height: 48px;
  position: relative;
  display: block;
  margin-left: 4px;
  margin-right: 4px;
  /**
   * Track
   */
  /**
   * Slider thumb
   */
  /* The sign that's focused in discrete mode */
  /**
   * The border/background that comes in when focused in non-discrete mode
   */
  /* Don't animate left/right while panning */ }
  md-slider .md-track-container {
    width: 100%;
    position: absolute;
    top: 23px;
    height: 2px; }
  md-slider .md-track {
    position: absolute;
    left: 0;
    right: 0;
    height: 100%; }
  md-slider .md-track-fill {
    transition: width 0.05s linear; }
  md-slider .md-track-ticks {
    position: absolute;
    left: 0;
    right: 0;
    height: 100%; }
  md-slider .md-thumb-container {
    position: absolute;
    left: 0;
    top: 0;
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
    transition: -webkit-transform 0.1s linear;
    transition: transform 0.1s linear; }
  md-slider .md-thumb {
    z-index: 1;
    position: absolute;
    left: -19px;
    top: 5px;
    width: 38px;
    height: 38px;
    border-radius: 38px;
    -webkit-transform: scale(0.5);
            transform: scale(0.5);
    transition: all 0.1s linear; }
    md-slider .md-thumb:after {
      content: '';
      position: absolute;
      left: 3px;
      top: 3px;
      width: 32px;
      height: 32px;
      border-radius: 32px;
      border: 3px solid; }
  md-slider .md-sign {
    /* Center the children (slider-thumb-text) */
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-align-items: center;
        -ms-flex-align: center;
            align-items: center;
    -webkit-justify-content: center;
        -ms-flex-pack: center;
            justify-content: center;
    position: absolute;
    left: -14px;
    top: -20px;
    width: 28px;
    height: 28px;
    border-radius: 28px;
    -webkit-transform: scale(0.4) translate3d(0, 70px, 0);
            transform: scale(0.4) translate3d(0, 70px, 0);
    transition: all 0.2s ease-in-out;
    /* The arrow pointing down under the sign */ }
    md-slider .md-sign:after {
      position: absolute;
      content: '';
      left: 0px;
      border-radius: 16px;
      top: 19px;
      border-left: 14px solid transparent;
      border-right: 14px solid transparent;
      border-top: 16px solid;
      opacity: 0;
      -webkit-transform: translate3d(0, -8px, 0);
              transform: translate3d(0, -8px, 0);
      transition: all 0.2s ease-in-out; }
    md-slider .md-sign .md-thumb-text {
      z-index: 1;
      font-size: 12px;
      font-weight: bold; }
  md-slider .md-focus-thumb {
    position: absolute;
    left: -24px;
    top: 0px;
    width: 48px;
    height: 48px;
    border-radius: 48px;
    display: none;
    opacity: 0;
    background-color: #C0C0C0;
    -webkit-animation: sliderFocusThumb 0.4s linear;
            animation: sliderFocusThumb 0.4s linear; }
  md-slider .md-focus-ring {
    position: absolute;
    left: -24px;
    top: 0px;
    width: 48px;
    height: 48px;
    border-radius: 48px;
    border: 2px solid #D6D6D6;
    background-color: transparent;
    -webkit-transform: scale(0);
            transform: scale(0);
    transition: all 0.2s linear; }
  md-slider .md-disabled-thumb {
    position: absolute;
    left: -22px;
    top: 2px;
    width: 44px;
    height: 44px;
    border-radius: 44px;
    -webkit-transform: scale(0.35);
            transform: scale(0.35);
    border: 6px solid;
    display: none; }
  md-slider.md-min .md-thumb:after {
    background-color: white; }
  md-slider.md-min .md-sign {
    opacity: 0; }
  md-slider:focus {
    outline: none; }
  md-slider.panning .md-thumb-container, md-slider.panning .md-track-fill {
    transition: none; }
  md-slider:not([discrete]) {
    /* Hide the sign and ticks in non-discrete mode */ }
    md-slider:not([discrete]) .md-track-ticks, md-slider:not([discrete]) .md-sign {
      display: none; }
    md-slider:not([discrete]):not([disabled]):hover .md-thumb {
      -webkit-transform: scale(0.6);
              transform: scale(0.6); }
    md-slider:not([discrete]):not([disabled]):focus .md-focus-thumb, md-slider:not([discrete]):not([disabled]).active .md-focus-thumb {
      display: block; }
    md-slider:not([discrete]):not([disabled]):focus .md-focus-ring, md-slider:not([discrete]):not([disabled]).active .md-focus-ring {
      -webkit-transform: scale(1);
              transform: scale(1); }
    md-slider:not([discrete]):not([disabled]):focus .md-thumb, md-slider:not([discrete]):not([disabled]).active .md-thumb {
      -webkit-transform: scale(0.85);
              transform: scale(0.85); }
  md-slider[discrete] {
    /* Hide the focus thumb in discrete mode */ }
    md-slider[discrete] .md-focus-thumb, md-slider[discrete] .md-focus-ring {
      display: none; }
    md-slider[discrete]:not([disabled]):focus .md-sign, md-slider[discrete]:not([disabled]):focus .md-sign:after, md-slider[discrete]:not([disabled]).active .md-sign, md-slider[discrete]:not([disabled]).active .md-sign:after {
      opacity: 1;
      -webkit-transform: translate3d(0, 0, 0) scale(1);
              transform: translate3d(0, 0, 0) scale(1); }
  md-slider[disabled] .md-track-fill {
    display: none; }
  md-slider[disabled] .md-sign {
    display: none; }
  md-slider[disabled] .md-thumb {
    -webkit-transform: scale(0.35);
            transform: scale(0.35); }
  md-slider[disabled] .md-disabled-thumb {
    display: block; }

.md-sticky-clone {
  z-index: 1;
  top: 0;
  left: 0;
  right: 0;
  position: absolute !important;
  -webkit-transform: translate3d(-9999px, -9999px, 0);
          transform: translate3d(-9999px, -9999px, 0); }
  .md-sticky-clone[sticky-state="active"] {
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0); }
    .md-sticky-clone[sticky-state="active"]:not(.md-sticky-no-effect):after {
      -webkit-animation: subheaderStickyHoverIn 0.3s ease-out both;
              animation: subheaderStickyHoverIn 0.3s ease-out both; }

@-webkit-keyframes subheaderStickyHoverIn {
  0% {
    box-shadow: 0 0 0 0 transparent; }

  100% {
    box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); } }

@keyframes subheaderStickyHoverIn {
  0% {
    box-shadow: 0 0 0 0 transparent; }

  100% {
    box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); } }

@-webkit-keyframes subheaderStickyHoverOut {
  0% {
    box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); }

  100% {
    box-shadow: 0 0 0 0 transparent; } }

@keyframes subheaderStickyHoverOut {
  0% {
    box-shadow: 0px 2px 4px 0 rgba(0, 0, 0, 0.16); }

  100% {
    box-shadow: 0 0 0 0 transparent; } }

.md-subheader {
  display: block;
  font-size: 0.9em;
  font-weight: 400;
  line-height: 1em;
  padding: 16px 0px 16px 16px;
  margin: 0 0 0 0;
  margin-right: 16px;
  position: relative; }
  .md-subheader:not(.md-sticky-no-effect) {
    transition: 0.2s ease-out margin; }
    .md-subheader:not(.md-sticky-no-effect):after {
      position: absolute;
      left: 0;
      bottom: 0;
      top: 0;
      right: -16px;
      content: ''; }
    .md-subheader:not(.md-sticky-no-effect)[sticky-state="active"] {
      margin-top: -2px; }
    .md-subheader:not(.md-sticky-no-effect):not(.md-sticky-clone)[sticky-prev-state="active"]:after {
      -webkit-animation: subheaderStickyHoverOut 0.3s ease-out both;
              animation: subheaderStickyHoverOut 0.3s ease-out both; }

md-switch {
  display: block;
  position: relative;
  height: 24px;
  margin: 8px;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  /* used also in _radio-button.scss */ }
  md-switch .md-switch-bar {
    position: absolute;
    left: 16px;
    top: 12px;
    width: 32px;
    height: 1px;
    pointer-events: none; }
  md-switch .md-switch-thumb {
    position: absolute;
    margin: 0;
    left: 0;
    top: 0;
    outline: none; }
    md-switch .md-switch-thumb .md-container {
      position: absolute;
      transition: -webkit-transform 0.2s linear;
      transition: transform 0.2s linear;
      -webkit-transform: translate3d(0, 0, 0);
              transform: translate3d(0, 0, 0); }
    md-switch .md-switch-thumb.md-checked .md-container {
      -webkit-transform: translate3d(48px, 0, 0);
              transform: translate3d(48px, 0, 0); }
    md-switch .md-switch-thumb .md-label {
      margin-left: 72px; }

md-tabs {
  display: block;
  width: 100%;
  font-weight: 500; }

.md-header {
  width: 100%;
  height: 48px;
  box-sizing: border-box;
  position: relative; }

.md-paginator {
  z-index: 1;
  margin-right: -2px;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  width: 32px;
  min-height: 100%;
  cursor: pointer;
  border: none;
  background-color: transparent;
  background-repeat: no-repeat;
  background-position: center center;
  position: absolute;
  /* TODO Once we have a better way to inline svg images, change this
   to use svgs correctly */ }
  .md-paginator.md-prev {
    left: 0; }
  .md-paginator.md-next {
    right: 0; }
  .md-paginator.md-prev {
    background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMjA4IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTUuNCw3LjQgMTQsNiA4LDEyIDE0LDE4IDE1LjQsMTYuNiAxMC44LDEyIAkJIiBzdHlsZT0iZmlsbDp3aGl0ZTsiLz4gPHJlY3QgZmlsbD0ibm9uZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+IDwvZz4gPC9nPiA8ZyBpZD0iR3JpZCIgZGlzcGxheT0ibm9uZSI+IDxnIGRpc3BsYXk9ImlubGluZSI+IDwvZz4gPC9nPiA8L3N2Zz4NCg=='); }
  .md-paginator.md-next {
    background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMzM2IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTAsNiA4LjYsNy40IDEzLjIsMTIgOC42LDE2LjYgMTAsMTggMTYsMTIgCQkiIHN0eWxlPSJmaWxsOndoaXRlOyIvPiA8cmVjdCBmaWxsPSJub25lIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiLz4gPC9nPiA8L2c+IDxnIGlkPSJHcmlkIiBkaXNwbGF5PSJub25lIj4gPGcgZGlzcGxheT0iaW5saW5lIj4gPC9nPiA8L2c+IDwvc3ZnPg0K'); }

/* If `center` justified, change to left-justify if paginating */
md-tabs[center] .md-header:not(.md-paginating) .md-header-items {
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center; }

.md-paginating .md-header-items-container {
  left: 32px;
  right: 32px; }

.md-header-items-container {
  overflow: hidden;
  position: absolute;
  left: 0;
  right: 0;
  height: 100%;
  white-space: nowrap;
  font-size: 16px;
  font-weight: 500;
  text-transform: uppercase;
  margin: auto; }
  .md-header-items-container .md-header-items {
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    box-sizing: border-box;
    transition: -webkit-transform 0.2s linear;
    transition: transform 0.2s linear;
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
    width: 100%;
    height: 100%; }

.md-tabs-content {
  overflow: hidden;
  width: 100%; }
  .md-tabs-content .md-tab-content {
    height: 100%; }

md-tabs-ink-bar {
  position: absolute;
  left: 0;
  bottom: 0;
  box-sizing: border-box;
  transition: all 0.2s linear;
  height: 2px;
  margin-top: -2px; }

md-tab {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex: 1;
      -ms-flex: 1;
          flex: 1;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center;
  box-sizing: border-box;
  position: relative;
  z-index: 0;
  overflow: hidden;
  height: 100%;
  text-align: center;
  cursor: pointer;
  min-width: 96px;
  border: 1px dotted transparent;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none; }
  md-tab[disabled] {
    pointer-events: none;
    cursor: default; }
  md-tab:focus {
    outline: none; }
  md-tab md-tab-label {
    -webkit-flex: 1;
        -ms-flex: 1;
            flex: 1;
    z-index: 100;
    opacity: 1;
    overflow: hidden;
    text-overflow: ellipsis; }

md-input-group label, .md-input-group label {
  display: block;
  font-size: 0.75em; }
md-input-group textarea, md-input-group input[type="text"], md-input-group input[type="password"], md-input-group input[type="datetime"], md-input-group input[type="datetime-local"], md-input-group input[type="date"], md-input-group input[type="month"], md-input-group input[type="time"], md-input-group input[type="week"], md-input-group input[type="number"], md-input-group input[type="email"], md-input-group input[type="url"], md-input-group input[type="search"], md-input-group input[type="tel"], md-input-group input[type="color"], .md-input-group textarea, .md-input-group input[type="text"], .md-input-group input[type="password"], .md-input-group input[type="datetime"], .md-input-group input[type="datetime-local"], .md-input-group input[type="date"], .md-input-group input[type="month"], .md-input-group input[type="time"], .md-input-group input[type="week"], .md-input-group input[type="number"], .md-input-group input[type="email"], .md-input-group input[type="url"], .md-input-group input[type="search"], .md-input-group input[type="tel"], .md-input-group input[type="color"] {
  display: block;
  border-width: 0 0 1px 0;
  padding-top: 2px;
  line-height: 26px;
  padding-bottom: 1px; }
  md-input-group textarea:focus, md-input-group input[type="text"]:focus, md-input-group input[type="password"]:focus, md-input-group input[type="datetime"]:focus, md-input-group input[type="datetime-local"]:focus, md-input-group input[type="date"]:focus, md-input-group input[type="month"]:focus, md-input-group input[type="time"]:focus, md-input-group input[type="week"]:focus, md-input-group input[type="number"]:focus, md-input-group input[type="email"]:focus, md-input-group input[type="url"]:focus, md-input-group input[type="search"]:focus, md-input-group input[type="tel"]:focus, md-input-group input[type="color"]:focus, .md-input-group textarea:focus, .md-input-group input[type="text"]:focus, .md-input-group input[type="password"]:focus, .md-input-group input[type="datetime"]:focus, .md-input-group input[type="datetime-local"]:focus, .md-input-group input[type="date"]:focus, .md-input-group input[type="month"]:focus, .md-input-group input[type="time"]:focus, .md-input-group input[type="week"]:focus, .md-input-group input[type="number"]:focus, .md-input-group input[type="email"]:focus, .md-input-group input[type="url"]:focus, .md-input-group input[type="search"]:focus, .md-input-group input[type="tel"]:focus, .md-input-group input[type="color"]:focus {
    outline: 0; }
md-input-group input, md-input-group textarea, .md-input-group input, .md-input-group textarea {
  background: none; }

md-input-group, .md-input-group {
  padding-bottom: 2px;
  margin: 10px 0 8px 0;
  position: relative;
  display: block; }
  md-input-group label, .md-input-group label {
    font-size: 1em;
    z-index: 1;
    pointer-events: none;
    -webkit-font-smoothing: antialiased; }
    md-input-group label:hover, .md-input-group label:hover {
      cursor: text; }
  md-input-group label, .md-input-group label {
    -webkit-transform: translate3d(0, 22px, 0);
            transform: translate3d(0, 22px, 0);
    -webkit-transform-origin: left center;
            transform-origin: left center;
    transition: all ease-out 150ms;
    transition: all ease-out 150ms; }
  md-input-group input, md-input-group textarea, .md-input-group input, .md-input-group textarea {
    border-bottom-width: 1px;
    transition: all ease-out 150ms; }
  md-input-group.md-input-focused label, .md-input-group.md-input-focused label {
    -webkit-transform: translate3d(0, 4px, 0) scale(0.75);
            transform: translate3d(0, 4px, 0) scale(0.75); }
  md-input-group.md-input-focused input, md-input-group.md-input-focused textarea, .md-input-group.md-input-focused input, .md-input-group.md-input-focused textarea {
    border-bottom-width: 2px; }
  md-input-group.md-input-focused input, .md-input-group.md-input-focused input {
    padding-bottom: 0px; }
  md-input-group.md-input-has-value label, .md-input-group.md-input-has-value label {
    -webkit-transform: translate3d(0, 4px, 0) scale(0.75);
            transform: translate3d(0, 4px, 0) scale(0.75); }
  md-input-group.md-input-has-value:not(.md-input-focused) label, .md-input-group.md-input-has-value:not(.md-input-focused) label {
    -webkit-transform: translate3d(0, 4px, 0) scale(0.75);
            transform: translate3d(0, 4px, 0) scale(0.75); }
  md-input-group[disabled] input, md-input-group[disabled] textarea, .md-input-group[disabled] input, .md-input-group[disabled] textarea {
    border-bottom-width: 0px; }
  md-input-group[disabled] input, md-input-group[disabled] textarea, .md-input-group[disabled] input, .md-input-group[disabled] textarea {
    background-size: 3px 1px;
    background-position: 0 bottom;
    background-size: 2px 1px;
    background-repeat: repeat-x;
    pointer-events: none; }
  md-input-group[disabled] label, .md-input-group[disabled] label {
    -webkit-transform: translate3d(0, 4px, 0) scale(0.75);
            transform: translate3d(0, 4px, 0) scale(0.75); }
  md-input-group[disabled] *:not(.md-input-has-value) label, .md-input-group[disabled] *:not(.md-input-has-value) label {
    -webkit-transform: translate3d(0, 22px, 0);
            transform: translate3d(0, 22px, 0);
    -webkit-transform-origin: left center;
            transform-origin: left center;
    transition: all ease-out 150ms; }

md-toast {
  display: block;
  position: absolute;
  box-sizing: border-box;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  min-height: 48px;
  padding-left: 24px;
  padding-right: 24px;
  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
  border-radius: 2px;
  font-size: 14px;
  cursor: default;
  max-width: 879px;
  max-height: 40px;
  height: 24px;
  z-index: 8;
  opacity: 1;
  -webkit-transform: translate3d(0, 0, 0) rotateZ(0deg);
          transform: translate3d(0, 0, 0) rotateZ(0deg);
  transition: 0.2s linear;
  transition-property: -webkit-transform, opacity;
  transition-property: transform, opacity;
  /* Transition differently when swiping */ }
  md-toast.md-capsule {
    border-radius: 24px; }
  md-toast.md-swipeleft, md-toast.md-swiperight, md-toast.md-swipeup, md-toast.md-swipedown {
    transition: 0.15s ease-out; }
  md-toast.ng-enter {
    -webkit-transform: translate3d(0, 100%, 0);
            transform: translate3d(0, 100%, 0);
    opacity: 0; }
    md-toast.ng-enter.md-top {
      -webkit-transform: translate3d(0, -100%, 0);
              transform: translate3d(0, -100%, 0); }
    md-toast.ng-enter.ng-enter-active {
      -webkit-transform: translate3d(0, 0, 0);
              transform: translate3d(0, 0, 0);
      opacity: 1; }
  md-toast.ng-leave.ng-leave-active {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
            transform: translate3d(0, 100%, 0); }
    md-toast.ng-leave.ng-leave-active.md-top {
      -webkit-transform: translate3d(0, -100%, 0);
              transform: translate3d(0, -100%, 0); }
    md-toast.ng-leave.ng-leave-active.md-swipeleft {
      -webkit-transform: translate3d(-100%, 0%, 0);
              transform: translate3d(-100%, 0%, 0); }
    md-toast.ng-leave.ng-leave-active.md-swiperight {
      -webkit-transform: translate3d(100%, 0%, 0);
              transform: translate3d(100%, 0%, 0); }
  md-toast .md-action {
    line-height: 19px;
    padding-left: 24px;
    cursor: pointer;
    text-transform: uppercase;
    float: right; }

@media (max-width: 600px) {
  md-toast {
    left: 0;
    right: 0;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    border-radius: 0;
    bottom: 0; }
    md-toast.md-top {
      bottom: auto;
      top: 0; }
 }

@media (min-width: 600px) {
  md-toast {
    min-width: 288px;
    /* 
     * When the toast doesn't take up the whole screen,
     * make it rotate when the user swipes it away
     */ }
    md-toast.md-bottom {
      bottom: 8px; }
    md-toast.md-left {
      left: 8px; }
    md-toast.md-right {
      right: 8px; }
    md-toast.md-top {
      top: 8px; }
    md-toast.ng-leave.ng-leave-active.md-swipeleft {
      -webkit-transform: translate3d(-100%, 25%, 0) rotateZ(-15deg);
              transform: translate3d(-100%, 25%, 0) rotateZ(-15deg); }
    md-toast.ng-leave.ng-leave-active.md-swiperight {
      -webkit-transform: translate3d(100%, 25%, 0) rotateZ(15deg);
              transform: translate3d(100%, 25%, 0) rotateZ(15deg); }
    md-toast.ng-leave.ng-leave-active.md-top.md-swipeleft {
      -webkit-transform: translate3d(-100%, 0, 0) rotateZ(-15deg);
              transform: translate3d(-100%, 0, 0) rotateZ(-15deg); }
    md-toast.ng-leave.ng-leave-active.md-top.md-swiperight {
      -webkit-transform: translate3d(100%, 0, 0) rotateZ(15deg);
              transform: translate3d(100%, 0, 0) rotateZ(15deg); }
 }

md-toolbar {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-direction: column;
      -ms-flex-direction: column;
          flex-direction: column;
  position: relative;
  z-index: 2;
  font-size: 1.3em;
  min-height: 64px;
  width: 100%; }
  md-toolbar.md-tall {
    height: 192px; }
  md-toolbar.md-medium-tall {
    height: 88px; }
    md-toolbar.md-medium-tall .md-toolbar-tools {
      height: 48px; }
  md-toolbar .md-indent {
    margin-left: 64px; }

.md-toolbar-tools {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  -webkit-flex-direction: row;
      -ms-flex-direction: row;
          flex-direction: row;
  width: 100%;
  height: 64px;
  font-size: inherit;
  font-weight: normal;
  padding: 0 10px;
  margin: 0; }
  .md-toolbar-tools > * {
    font-size: inherit;
    margin: 0 8px; }
  .md-toolbar-tools h2, .md-toolbar-tools h3 {
    font-weight: normal; }
  .md-toolbar-tools a {
    color: inherit;
    text-decoration: none; }
  .md-toolbar-tools .md-button {
    font-size: 16px; }

@-webkit-keyframes tooltipBackgroundShow {
  0% {
    -webkit-transform: scale(0.2);
            transform: scale(0.2);
    opacity: 0.25; }

  50% {
    opacity: 1; }

  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
    opacity: 1; } }

@keyframes tooltipBackgroundShow {
  0% {
    -webkit-transform: scale(0.2);
            transform: scale(0.2);
    opacity: 0.25; }

  50% {
    opacity: 1; }

  100% {
    -webkit-transform: scale(1);
            transform: scale(1);
    opacity: 1; } }

@-webkit-keyframes tooltipBackgroundHide {
  0% {
    opacity: 1; }

  100% {
    opacity: 0; } }

@keyframes tooltipBackgroundHide {
  0% {
    opacity: 1; }

  100% {
    opacity: 0; } }

md-tooltip {
  position: absolute;
  font-size: 14px;
  z-index: 9;
  overflow: hidden;
  pointer-events: none;
  border-radius: 4px;
  /**
   * Depending on the tooltip's size as a multiple of 32 (set by JS),
   * change the background's animation duration.
   * The larger the tooltip, the less time the background should take to ripple outwards.
   */ }
  md-tooltip[md-direction="bottom"] {
    -webkit-transform: translate3d(0, -30%, 0);
            transform: translate3d(0, -30%, 0);
    margin-top: 8px; }
  md-tooltip[md-direction="top"] {
    -webkit-transform: translate3d(0, 30%, 0);
            transform: translate3d(0, 30%, 0);
    margin-bottom: 8px; }
  md-tooltip .md-background {
    position: absolute;
    left: 50%;
    width: 256px;
    height: 256px;
    margin-left: -128px;
    margin-top: -128px;
    border-radius: 256px;
    opacity: 0.25;
    -webkit-transform: scale(0.2);
            transform: scale(0.2); }
  md-tooltip .md-content {
    max-width: 240px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    padding: 8px;
    background: transparent;
    opacity: 0.3;
    transition: inherit; }
  md-tooltip.md-show, md-tooltip.md-hide {
    transition: 0.2s ease-out;
    transition-property: -webkit-transform, opacity;
    transition-property: transform, opacity; }
  md-tooltip.md-show {
    pointer-events: auto;
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0); }
    md-tooltip.md-show .md-background {
      -webkit-transform: scale(1);
              transform: scale(1);
      opacity: 1;
      -webkit-animation: tooltipBackgroundShow linear;
              animation: tooltipBackgroundShow linear; }
    md-tooltip.md-show .md-content {
      opacity: 0.99; }
  md-tooltip.md-hide .md-background {
    -webkit-transform: scale(1);
            transform: scale(1);
    opacity: 0;
    -webkit-animation: tooltipBackgroundHide 0.2s linear;
            animation: tooltipBackgroundHide 0.2s linear; }
  md-tooltip[width-32="1"].md-show .md-background {
    -webkit-animation-duration: 900ms;
            animation-duration: 900ms; }
  md-tooltip[width-32="2"].md-show .md-background {
    -webkit-animation-duration: 800ms;
            animation-duration: 800ms; }
  md-tooltip[width-32="3"].md-show .md-background {
    -webkit-animation-duration: 700ms;
            animation-duration: 700ms; }
  md-tooltip[width-32="4"].md-show .md-background {
    -webkit-animation-duration: 600ms;
            animation-duration: 600ms; }
  md-tooltip[width-32="5"].md-show .md-background {
    -webkit-animation-duration: 500ms;
            animation-duration: 500ms; }
  md-tooltip[width-32="6"].md-show .md-background {
    -webkit-animation-duration: 400ms;
            animation-duration: 400ms; }
  md-tooltip[width-32="7"].md-show .md-background {
    -webkit-animation-duration: 300ms;
            animation-duration: 300ms; }
  md-tooltip[width-32="8"].md-show .md-background {
    -webkit-animation-duration: 200ms;
            animation-duration: 200ms; }

.md-whiteframe-z1 {
  box-shadow: 0px 2px 5px 0 rgba(0, 0, 0, 0.26); }

.md-whiteframe-z2 {
  box-shadow: 0px 8px 17px rgba(0, 0, 0, 0.2); }

.md-whiteframe-z3 {
  box-shadow: 0px 17px 50px rgba(0, 0, 0, 0.19); }

.md-whiteframe-z4 {
  box-shadow: 0px 16px 28px 0 rgba(0, 0, 0, 0.22); }

.md-whiteframe-z5 {
  box-shadow: 0px 27px 24px 0 rgba(0, 0, 0, 0.2); }

md-backdrop.md-opaque.md-default-theme {
  background-color: rgba(0, 0, 0, 0.3);
  position: absolute; }

md-bottom-sheet.md-default-theme {
  background-color: #fafafa;
  border-top-color: #bdbdbd; }
  md-bottom-sheet.md-default-theme.md-list md-item {
    color: rgba(0, 0, 0, 0.54); }
  md-bottom-sheet.md-default-theme .md-subheader {
    background-color: #fafafa; }
  md-bottom-sheet.md-default-theme .md-subheader {
    color: rgba(0, 0, 0, 0.54); }

.md-button.md-default-theme {
  border-radius: 3px; }
  .md-button.md-default-theme:not([disabled]):hover, .md-button.md-default-theme:not([disabled]):focus {
    background-color: rgba(158, 158, 158, 0.2); }
  .md-button.md-default-theme.md-fab {
    border-radius: 50%; }
  .md-button.md-default-theme.md-primary {
    color: #29b6f6;
    fill: #29b6f6; }
  .md-button.md-default-theme.md-warn {
    color: #e84e40;
    fill: #e84e40; }
  .md-button.md-default-theme.md-raised, .md-button.md-default-theme.md-fab {
    background-color: rgba(158, 158, 158, 0.185); }
    .md-button.md-default-theme.md-raised:not([disabled]):hover, .md-button.md-default-theme.md-raised:not([disabled]):focus, .md-button.md-default-theme.md-fab:not([disabled]):hover, .md-button.md-default-theme.md-fab:not([disabled]):focus {
      background-color: rgba(158, 158, 158, 0.3); }
    .md-button.md-default-theme.md-raised.md-primary, .md-button.md-default-theme.md-fab.md-primary {
      color: white;
      background-color: #03a9f4; }
      .md-button.md-default-theme.md-raised.md-primary:not([disabled]):hover, .md-button.md-default-theme.md-raised.md-primary:not([disabled]):focus, .md-button.md-default-theme.md-fab.md-primary:not([disabled]):hover, .md-button.md-default-theme.md-fab.md-primary:not([disabled]):focus {
        background-color: #039be5; }
    .md-button.md-default-theme.md-raised.md-warn, .md-button.md-default-theme.md-fab.md-warn {
      color: white;
      background-color: #e51c23; }
      .md-button.md-default-theme.md-raised.md-warn:not([disabled]):hover, .md-button.md-default-theme.md-raised.md-warn:not([disabled]):focus, .md-button.md-default-theme.md-fab.md-warn:not([disabled]):hover, .md-button.md-default-theme.md-fab.md-warn:not([disabled]):focus {
        background-color: #d01716; }
  .md-button.md-default-theme[disabled], .md-button.md-default-theme.md-raised[disabled], .md-button.md-default-theme.md-fab[disabled] {
    color: rgba(0, 0, 0, 0.26);
    fill: rgba(0, 0, 0, 0.26);
    background-color: transparent;
    cursor: not-allowed; }

md-card.md-default-theme {
  border-radius: 2px; }
  md-card.md-default-theme .md-card-image {
    border-radius: 2px 2px 0 0; }

md-checkbox.md-default-theme .md-ripple {
  color: #0a8f08; }
md-checkbox.md-default-theme.md-checked .md-ripple {
  color: #757575; }
md-checkbox.md-default-theme .md-icon {
  border-color: rgba(0, 0, 0, 0.54); }
md-checkbox.md-default-theme.md-checked .md-icon {
  background-color: rgba(43, 175, 43, 0.87); }
md-checkbox.md-default-theme.md-checked .md-icon:after {
  border-color: #eeeeee; }
md-checkbox.md-default-theme[disabled] .md-icon {
  border-color: rgba(0, 0, 0, 0.26); }
md-checkbox.md-default-theme[disabled].md-checked .md-icon {
  background-color: rgba(0, 0, 0, 0.26); }

md-content.md-default-theme {
  background-color: #ffffff; }

md-dialog.md-default-theme {
  border-radius: 4px;
  background-color: #ffffff; }
  md-dialog.md-default-theme.md-content-overflow .md-actions {
    border-top-color: rgba(0, 0, 0, 0.12); }

md-divider.md-default-theme {
  border-top-color: rgba(0, 0, 0, 0.12); }

md-progress-circular.md-default-theme {
  background-color: transparent; }
  md-progress-circular.md-default-theme .md-circle .md-mask .md-fill {
    background-color: #03a9f4; }
  md-progress-circular.md-default-theme .md-inset {
    background-color: #ffffff; }

md-progress-linear.md-default-theme .md-container {
  background-color: #b3e5fc; }
md-progress-linear.md-default-theme .md-bar {
  background-color: #03a9f4; }
md-progress-linear.md-default-theme[mode=buffer] .md-dashed:before {
  background: radial-gradient(#b3e5fc 0%, #b3e5fc 16%, transparent 42%); }
md-progress-linear.md-default-theme[mode=buffer] .md-bar1 {
  background-color: #b3e5fc; }

md-radio-button.md-default-theme .md-container .md-ripple, md-switch.md-default-theme .md-switch-thumb .md-container .md-ripple {
  color: #0a8f08; }
md-radio-button.md-default-theme .md-off, md-switch.md-default-theme .md-switch-thumb .md-off {
  border-color: rgba(0, 0, 0, 0.54); }
md-radio-button.md-default-theme .md-on, md-switch.md-default-theme .md-switch-thumb .md-on {
  background-color: rgba(43, 175, 43, 0.87); }
md-radio-button.md-default-theme.md-checked .md-off, md-switch.md-default-theme .md-switch-thumb.md-checked .md-off {
  border-color: rgba(43, 175, 43, 0.87); }
md-radio-button.md-default-theme.md-checked .md-ink-ripple, md-switch.md-default-theme .md-switch-thumb.md-checked .md-ink-ripple {
  color: rgba(43, 175, 43, 0.87); }

md-radio-group.md-default-theme:focus {
  border-color: rgba(0, 0, 0, 0.73); }

md-slider.md-default-theme .md-track {
  background-color: #c8c8c8; }
md-slider.md-default-theme .md-track-fill {
  background-color: #03a9f4; }
md-slider.md-default-theme .md-thumb:after {
  border-color: #03a9f4;
  background-color: #03a9f4; }
md-slider.md-default-theme .md-sign {
  background-color: #03a9f4; }
  md-slider.md-default-theme .md-sign:after {
    border-top-color: #03a9f4; }
md-slider.md-default-theme .md-thumb-text {
  color: white; }
md-slider.md-default-theme .md-focus-thumb {
  background-color: rgba(0, 0, 0, 0.54); }
md-slider.md-default-theme .md-focus-ring {
  border-color: rgba(0, 0, 0, 0.12); }
md-slider.md-default-theme .md-disabled-thumb {
  border-color: #ffffff; }
md-slider.md-default-theme.md-min .md-thumb:after {
  background-color: #ffffff; }
md-slider.md-default-theme[disabled] .md-thumb:after {
  border-color: #bdbdbd; }
md-slider.md-default-theme[disabled]:not(.md-min) .md-thumb:after {
  background-color: #bdbdbd; }

.md-subheader.md-default-theme {
  color: rgba(0, 0, 0, 0.54);
  background-color: #ffffff; }
  .md-subheader.md-default-theme.md-primary {
    color: #03a9f4; }

md-switch.md-default-theme .md-switch-bar {
  background-color: rgba(0, 0, 0, 0.54); }
md-switch.md-default-theme .md-switch-thumb:focus .md-label {
  border: 1px dotted black; }

md-tabs.md-default-theme .md-header {
  background-color: #03a9f4; }
md-tabs.md-default-theme md-tabs-ink-bar {
  background: #ffff85; }
md-tabs.md-default-theme md-tab {
  color: #b3e5fc; }
  md-tabs.md-default-theme md-tab.active {
    color: white; }
  md-tabs.md-default-theme md-tab[disabled] {
    color: rgba(0, 0, 0, 0.12); }
  md-tabs.md-default-theme md-tab:focus {
    border-color: rgba(0, 0, 0, 0.73); }
  md-tabs.md-default-theme md-tab .md-ripple-container {
    color: #ffff85; }

md-input-group.md-default-theme input, md-input-group.md-default-theme textarea {
  text-shadow: none; }
  md-input-group.md-default-theme input:-ms-input-placeholder, md-input-group.md-default-theme textarea:-ms-input-placeholder {
    color: rgba(0, 0, 0, 0.26); }
  md-input-group.md-default-theme input::-webkit-input-placeholder, md-input-group.md-default-theme textarea::-webkit-input-placeholder {
    color: rgba(0, 0, 0, 0.26); }
md-input-group.md-default-theme label {
  text-shadow: none;
  color: rgba(0, 0, 0, 0.26); }
md-input-group.md-default-theme input, md-input-group.md-default-theme textarea {
  color: rgba(0, 0, 0, 0.73);
  border-color: rgba(0, 0, 0, 0.12); }
md-input-group.md-default-theme.md-input-focused input, md-input-group.md-default-theme.md-input-focused textarea {
  border-color: #03a9f4; }
md-input-group.md-default-theme.md-input-focused label {
  color: #03a9f4; }
md-input-group.md-default-theme.md-input-has-value:not(.md-input-focused) label {
  color: rgba(0, 0, 0, 0.372); }
md-input-group.md-default-theme[disabled] input, md-input-group.md-default-theme[disabled] textarea {
  border-bottom-color: rgba(0, 0, 0, 0.12);
  color: rgba(0, 0, 0, 0.26);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.19) 0%, rgba(0, 0, 0, 0.19) 50%, rgba(0, 0, 0, 0) 0%); }

md-toast.md-default-theme {
  background-color: #323232;
  color: white; }
  md-toast.md-default-theme .md-button {
    color: white; }
  md-toast.md-default-theme .md-action {
    color: #40c4ff; }

md-toolbar.md-default-theme {
  background-color: #03a9f4;
  color: white; }

md-tooltip.md-default-theme {
  color: #ffffff; }
  md-tooltip.md-default-theme .md-background {
    background-color: rgba(0, 0, 0, 0.52); }
md-backdrop.md-opaque.md-deep-orange-theme {
  background-color: rgba(0, 0, 0, 0.3);
  position: absolute; }

md-bottom-sheet.md-deep-orange-theme {
  background-color: #fafafa;
  border-top-color: #bdbdbd; }
  md-bottom-sheet.md-deep-orange-theme.md-list md-item {
    color: rgba(0, 0, 0, 0.54); }
  md-bottom-sheet.md-deep-orange-theme .md-subheader {
    background-color: #fafafa; }
  md-bottom-sheet.md-deep-orange-theme .md-subheader {
    color: rgba(0, 0, 0, 0.54); }

.md-button.md-deep-orange-theme {
  border-radius: 3px; }
  .md-button.md-deep-orange-theme:not([disabled]):hover, .md-button.md-deep-orange-theme:not([disabled]):focus {
    background-color: rgba(158, 158, 158, 0.2); }
  .md-button.md-deep-orange-theme.md-fab {
    border-radius: 50%; }
  .md-button.md-deep-orange-theme.md-primary {
    color: #ff7043;
    fill: #ff7043; }
  .md-button.md-deep-orange-theme.md-warn {
    color: #e84e40;
    fill: #e84e40; }
  .md-button.md-deep-orange-theme.md-raised, .md-button.md-deep-orange-theme.md-fab {
    background-color: rgba(158, 158, 158, 0.185); }
    .md-button.md-deep-orange-theme.md-raised:not([disabled]):hover, .md-button.md-deep-orange-theme.md-raised:not([disabled]):focus, .md-button.md-deep-orange-theme.md-fab:not([disabled]):hover, .md-button.md-deep-orange-theme.md-fab:not([disabled]):focus {
      background-color: rgba(158, 158, 158, 0.3); }
    .md-button.md-deep-orange-theme.md-raised.md-primary, .md-button.md-deep-orange-theme.md-fab.md-primary {
      color: white;
      background-color: #ff5722; }
      .md-button.md-deep-orange-theme.md-raised.md-primary:not([disabled]):hover, .md-button.md-deep-orange-theme.md-raised.md-primary:not([disabled]):focus, .md-button.md-deep-orange-theme.md-fab.md-primary:not([disabled]):hover, .md-button.md-deep-orange-theme.md-fab.md-primary:not([disabled]):focus {
        background-color: #f4511e; }
    .md-button.md-deep-orange-theme.md-raised.md-warn, .md-button.md-deep-orange-theme.md-fab.md-warn {
      color: white;
      background-color: #e51c23; }
      .md-button.md-deep-orange-theme.md-raised.md-warn:not([disabled]):hover, .md-button.md-deep-orange-theme.md-raised.md-warn:not([disabled]):focus, .md-button.md-deep-orange-theme.md-fab.md-warn:not([disabled]):hover, .md-button.md-deep-orange-theme.md-fab.md-warn:not([disabled]):focus {
        background-color: #d01716; }
  .md-button.md-deep-orange-theme[disabled], .md-button.md-deep-orange-theme.md-raised[disabled], .md-button.md-deep-orange-theme.md-fab[disabled] {
    color: rgba(0, 0, 0, 0.26);
    fill: rgba(0, 0, 0, 0.26);
    background-color: transparent;
    cursor: not-allowed; }

md-card.md-deep-orange-theme {
  border-radius: 2px; }
  md-card.md-deep-orange-theme .md-card-image {
    border-radius: 2px 2px 0 0; }

md-checkbox.md-deep-orange-theme .md-ripple {
  color: #0a8f08; }
md-checkbox.md-deep-orange-theme.md-checked .md-ripple {
  color: #757575; }
md-checkbox.md-deep-orange-theme .md-icon {
  border-color: rgba(0, 0, 0, 0.54); }
md-checkbox.md-deep-orange-theme.md-checked .md-icon {
  background-color: rgba(43, 175, 43, 0.87); }
md-checkbox.md-deep-orange-theme.md-checked .md-icon:after {
  border-color: #eeeeee; }
md-checkbox.md-deep-orange-theme[disabled] .md-icon {
  border-color: rgba(0, 0, 0, 0.26); }
md-checkbox.md-deep-orange-theme[disabled].md-checked .md-icon {
  background-color: rgba(0, 0, 0, 0.26); }

md-content.md-deep-orange-theme {
  background-color: #ffffff; }

md-dialog.md-deep-orange-theme {
  border-radius: 4px;
  background-color: #ffffff; }
  md-dialog.md-deep-orange-theme.md-content-overflow .md-actions {
    border-top-color: rgba(0, 0, 0, 0.12); }

md-divider.md-deep-orange-theme {
  border-top-color: rgba(0, 0, 0, 0.12); }

md-progress-circular.md-deep-orange-theme {
  background-color: transparent; }
  md-progress-circular.md-deep-orange-theme .md-circle .md-mask .md-fill {
    background-color: #ff5722; }
  md-progress-circular.md-deep-orange-theme .md-inset {
    background-color: #ffffff; }

md-progress-linear.md-deep-orange-theme .md-container {
  background-color: #ffccbc; }
md-progress-linear.md-deep-orange-theme .md-bar {
  background-color: #ff5722; }
md-progress-linear.md-deep-orange-theme[mode=buffer] .md-dashed:before {
  background: radial-gradient(#ffccbc 0%, #ffccbc 16%, transparent 42%); }
md-progress-linear.md-deep-orange-theme[mode=buffer] .md-bar1 {
  background-color: #ffccbc; }

md-radio-button.md-deep-orange-theme .md-container .md-ripple, md-switch.md-deep-orange-theme .md-switch-thumb .md-container .md-ripple {
  color: #0a8f08; }
md-radio-button.md-deep-orange-theme .md-off, md-switch.md-deep-orange-theme .md-switch-thumb .md-off {
  border-color: rgba(0, 0, 0, 0.54); }
md-radio-button.md-deep-orange-theme .md-on, md-switch.md-deep-orange-theme .md-switch-thumb .md-on {
  background-color: rgba(43, 175, 43, 0.87); }
md-radio-button.md-deep-orange-theme.md-checked .md-off, md-switch.md-deep-orange-theme .md-switch-thumb.md-checked .md-off {
  border-color: rgba(43, 175, 43, 0.87); }
md-radio-button.md-deep-orange-theme.md-checked .md-ink-ripple, md-switch.md-deep-orange-theme .md-switch-thumb.md-checked .md-ink-ripple {
  color: rgba(43, 175, 43, 0.87); }

md-radio-group.md-deep-orange-theme:focus {
  border-color: rgba(0, 0, 0, 0.73); }

md-slider.md-deep-orange-theme .md-track {
  background-color: rgba(0, 0, 0, 0.26); }
md-slider.md-deep-orange-theme .md-track-fill {
  background-color: #ff5722; }
md-slider.md-deep-orange-theme .md-thumb:after {
  border-color: #ff5722;
  background-color: #ff5722; }
md-slider.md-deep-orange-theme .md-sign {
  background-color: #ff5722; }
  md-slider.md-deep-orange-theme .md-sign:after {
    border-top-color: #ff5722; }
md-slider.md-deep-orange-theme .md-thumb-text {
  color: white; }
md-slider.md-deep-orange-theme .md-focus-thumb {
  background-color: rgba(0, 0, 0, 0.54); }
md-slider.md-deep-orange-theme .md-focus-ring {
  border-color: rgba(0, 0, 0, 0.12); }
md-slider.md-deep-orange-theme .md-disabled-thumb {
  border-color: #ffffff; }
md-slider.md-deep-orange-theme.md-min .md-thumb:after {
  background-color: #ffffff; }
md-slider.md-deep-orange-theme[disabled] .md-thumb:after {
  border-color: #bdbdbd; }
md-slider.md-deep-orange-theme[disabled]:not(.md-min) .md-thumb:after {
  background-color: #bdbdbd; }

.md-subheader.md-deep-orange-theme {
  color: rgba(0, 0, 0, 0.54);
  background-color: #ffffff; }
  .md-subheader.md-deep-orange-theme.md-primary {
    color: #ff5722; }

md-switch.md-deep-orange-theme .md-switch-bar {
  background-color: rgba(0, 0, 0, 0.54); }
md-switch.md-deep-orange-theme .md-switch-thumb:focus .md-label {
  border: 1px dotted black; }

md-tabs.md-deep-orange-theme .md-header {
  background-color: #ff5722; }
md-tabs.md-deep-orange-theme md-tabs-ink-bar {
  background: #ffff85; }
md-tabs.md-deep-orange-theme md-tab {
  color: #ffccbc; }
  md-tabs.md-deep-orange-theme md-tab.active {
    color: white; }
  md-tabs.md-deep-orange-theme md-tab[disabled] {
    color: rgba(0, 0, 0, 0.12); }
  md-tabs.md-deep-orange-theme md-tab:focus {
    border-color: rgba(0, 0, 0, 0.73); }
  md-tabs.md-deep-orange-theme md-tab .md-ripple-container {
    color: #ffff85; }

md-input-group.md-deep-orange-theme input, md-input-group.md-deep-orange-theme textarea {
  text-shadow: none; }
  md-input-group.md-deep-orange-theme input:-ms-input-placeholder, md-input-group.md-deep-orange-theme textarea:-ms-input-placeholder {
    color: rgba(0, 0, 0, 0.26); }
  md-input-group.md-deep-orange-theme input::-webkit-input-placeholder, md-input-group.md-deep-orange-theme textarea::-webkit-input-placeholder {
    color: rgba(0, 0, 0, 0.26); }
md-input-group.md-deep-orange-theme label {
  text-shadow: none;
  color: rgba(0, 0, 0, 0.26); }
md-input-group.md-deep-orange-theme input, md-input-group.md-deep-orange-theme textarea {
  color: rgba(0, 0, 0, 0.73);
  border-color: rgba(0, 0, 0, 0.12); }
md-input-group.md-deep-orange-theme.md-input-focused input, md-input-group.md-deep-orange-theme.md-input-focused textarea {
  border-color: #ff5722; }
md-input-group.md-deep-orange-theme.md-input-focused label {
  color: #ff5722; }
md-input-group.md-deep-orange-theme.md-input-has-value:not(.md-input-focused) label {
  color: rgba(0, 0, 0, 0.372); }
md-input-group.md-deep-orange-theme[disabled] input, md-input-group.md-deep-orange-theme[disabled] textarea {
  border-bottom-color: rgba(0, 0, 0, 0.12);
  color: rgba(0, 0, 0, 0.26);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.19) 0%, rgba(0, 0, 0, 0.19) 50%, rgba(0, 0, 0, 0) 0%); }

md-toast.md-deep-orange-theme {
  background-color: #323232;
  color: white; }
  md-toast.md-deep-orange-theme .md-button {
    color: white; }
  md-toast.md-deep-orange-theme .md-action {
    color: #ff6e40; }

md-toolbar.md-deep-orange-theme {
  background-color: #ff5722;
  color: white; }

md-tooltip.md-deep-orange-theme {
  color: #ffffff; }
  md-tooltip.md-deep-orange-theme .md-background {
    background-color: rgba(0, 0, 0, 0.52); }
md-backdrop.md-opaque.md-red-theme {
  background-color: rgba(0, 0, 0, 0.3);
  position: absolute; }

md-bottom-sheet.md-red-theme {
  background-color: #fafafa;
  border-top-color: #bdbdbd; }
  md-bottom-sheet.md-red-theme.md-list md-item {
    color: rgba(0, 0, 0, 0.54); }
  md-bottom-sheet.md-red-theme .md-subheader {
    background-color: #fafafa; }
  md-bottom-sheet.md-red-theme .md-subheader {
    color: rgba(0, 0, 0, 0.54); }

.md-button.md-red-theme {
  border-radius: 3px; }
  .md-button.md-red-theme:not([disabled]):hover, .md-button.md-red-theme:not([disabled]):focus {
    background-color: rgba(158, 158, 158, 0.2); }
  .md-button.md-red-theme.md-fab {
    border-radius: 50%; }
  .md-button.md-red-theme.md-primary {
    color: #e84e40;
    fill: #e84e40; }
  .md-button.md-red-theme.md-warn {
    color: #e84e40;
    fill: #e84e40; }
  .md-button.md-red-theme.md-raised, .md-button.md-red-theme.md-fab {
    background-color: rgba(158, 158, 158, 0.185); }
    .md-button.md-red-theme.md-raised:not([disabled]):hover, .md-button.md-red-theme.md-raised:not([disabled]):focus, .md-button.md-red-theme.md-fab:not([disabled]):hover, .md-button.md-red-theme.md-fab:not([disabled]):focus {
      background-color: rgba(158, 158, 158, 0.3); }
    .md-button.md-red-theme.md-raised.md-primary, .md-button.md-red-theme.md-fab.md-primary {
      color: white;
      background-color: #e51c23; }
      .md-button.md-red-theme.md-raised.md-primary:not([disabled]):hover, .md-button.md-red-theme.md-raised.md-primary:not([disabled]):focus, .md-button.md-red-theme.md-fab.md-primary:not([disabled]):hover, .md-button.md-red-theme.md-fab.md-primary:not([disabled]):focus {
        background-color: #dd191d; }
    .md-button.md-red-theme.md-raised.md-warn, .md-button.md-red-theme.md-fab.md-warn {
      color: white;
      background-color: #e51c23; }
      .md-button.md-red-theme.md-raised.md-warn:not([disabled]):hover, .md-button.md-red-theme.md-raised.md-warn:not([disabled]):focus, .md-button.md-red-theme.md-fab.md-warn:not([disabled]):hover, .md-button.md-red-theme.md-fab.md-warn:not([disabled]):focus {
        background-color: #d01716; }
  .md-button.md-red-theme[disabled], .md-button.md-red-theme.md-raised[disabled], .md-button.md-red-theme.md-fab[disabled] {
    color: rgba(0, 0, 0, 0.26);
    fill: rgba(0, 0, 0, 0.26);
    background-color: transparent;
    cursor: not-allowed; }

md-card.md-red-theme {
  border-radius: 2px; }
  md-card.md-red-theme .md-card-image {
    border-radius: 2px 2px 0 0; }

md-checkbox.md-red-theme .md-ripple {
  color: #0a8f08; }
md-checkbox.md-red-theme.md-checked .md-ripple {
  color: #757575; }
md-checkbox.md-red-theme .md-icon {
  border-color: rgba(0, 0, 0, 0.54); }
md-checkbox.md-red-theme.md-checked .md-icon {
  background-color: rgba(43, 175, 43, 0.87); }
md-checkbox.md-red-theme.md-checked .md-icon:after {
  border-color: #eeeeee; }
md-checkbox.md-red-theme[disabled] .md-icon {
  border-color: rgba(0, 0, 0, 0.26); }
md-checkbox.md-red-theme[disabled].md-checked .md-icon {
  background-color: rgba(0, 0, 0, 0.26); }

md-content.md-red-theme {
  background-color: #ffffff; }

md-dialog.md-red-theme {
  border-radius: 4px;
  background-color: #ffffff; }
  md-dialog.md-red-theme.md-content-overflow .md-actions {
    border-top-color: rgba(0, 0, 0, 0.12); }

md-divider.md-red-theme {
  border-top-color: rgba(0, 0, 0, 0.12); }

md-progress-circular.md-red-theme {
  background-color: transparent; }
  md-progress-circular.md-red-theme .md-circle .md-mask .md-fill {
    background-color: #e51c23; }
  md-progress-circular.md-red-theme .md-inset {
    background-color: #ffffff; }

md-progress-linear.md-red-theme .md-container {
  background-color: #f9bdbb; }
md-progress-linear.md-red-theme .md-bar {
  background-color: #e51c23; }
md-progress-linear.md-red-theme[mode=buffer] .md-dashed:before {
  background: radial-gradient(#f9bdbb 0%, #f9bdbb 16%, transparent 42%); }
md-progress-linear.md-red-theme[mode=buffer] .md-bar1 {
  background-color: #f9bdbb; }

md-radio-button.md-red-theme .md-container .md-ripple, md-switch.md-red-theme .md-switch-thumb .md-container .md-ripple {
  color: #0a8f08; }
md-radio-button.md-red-theme .md-off, md-switch.md-red-theme .md-switch-thumb .md-off {
  border-color: rgba(0, 0, 0, 0.54); }
md-radio-button.md-red-theme .md-on, md-switch.md-red-theme .md-switch-thumb .md-on {
  background-color: rgba(43, 175, 43, 0.87); }
md-radio-button.md-red-theme.md-checked .md-off, md-switch.md-red-theme .md-switch-thumb.md-checked .md-off {
  border-color: rgba(43, 175, 43, 0.87); }
md-radio-button.md-red-theme.md-checked .md-ink-ripple, md-switch.md-red-theme .md-switch-thumb.md-checked .md-ink-ripple {
  color: rgba(43, 175, 43, 0.87); }

md-radio-group.md-red-theme:focus {
  border-color: rgba(0, 0, 0, 0.73); }

md-slider.md-red-theme .md-track {
  background-color: rgba(0, 0, 0, 0.26); }
md-slider.md-red-theme .md-track-fill {
  background-color: #e51c23; }
md-slider.md-red-theme .md-thumb:after {
  border-color: #e51c23;
  background-color: #e51c23; }
md-slider.md-red-theme .md-sign {
  background-color: #e51c23; }
  md-slider.md-red-theme .md-sign:after {
    border-top-color: #e51c23; }
md-slider.md-red-theme .md-thumb-text {
  color: white; }
md-slider.md-red-theme .md-focus-thumb {
  background-color: rgba(0, 0, 0, 0.54); }
md-slider.md-red-theme .md-focus-ring {
  border-color: rgba(0, 0, 0, 0.12); }
md-slider.md-red-theme .md-disabled-thumb {
  border-color: #ffffff; }
md-slider.md-red-theme.md-min .md-thumb:after {
  background-color: #ffffff; }
md-slider.md-red-theme[disabled] .md-thumb:after {
  border-color: #bdbdbd; }
md-slider.md-red-theme[disabled]:not(.md-min) .md-thumb:after {
  background-color: #bdbdbd; }

.md-subheader.md-red-theme {
  color: rgba(0, 0, 0, 0.54);
  background-color: #ffffff; }
  .md-subheader.md-red-theme.md-primary {
    color: #e51c23; }

md-switch.md-red-theme .md-switch-bar {
  background-color: rgba(0, 0, 0, 0.54); }
md-switch.md-red-theme .md-switch-thumb:focus .md-label {
  border: 1px dotted black; }

md-tabs.md-red-theme .md-header {
  background-color: #e51c23; }
md-tabs.md-red-theme md-tabs-ink-bar {
  background: #ffff85; }
md-tabs.md-red-theme md-tab {
  color: #f9bdbb; }
  md-tabs.md-red-theme md-tab.active {
    color: white; }
  md-tabs.md-red-theme md-tab[disabled] {
    color: rgba(0, 0, 0, 0.12); }
  md-tabs.md-red-theme md-tab:focus {
    border-color: rgba(0, 0, 0, 0.73); }
  md-tabs.md-red-theme md-tab .md-ripple-container {
    color: #ffff85; }

md-input-group.md-red-theme input, md-input-group.md-red-theme textarea {
  text-shadow: none; }
  md-input-group.md-red-theme input:-ms-input-placeholder, md-input-group.md-red-theme textarea:-ms-input-placeholder {
    color: rgba(0, 0, 0, 0.26); }
  md-input-group.md-red-theme input::-webkit-input-placeholder, md-input-group.md-red-theme textarea::-webkit-input-placeholder {
    color: rgba(0, 0, 0, 0.26); }
md-input-group.md-red-theme label {
  text-shadow: none;
  color: rgba(0, 0, 0, 0.26); }
md-input-group.md-red-theme input, md-input-group.md-red-theme textarea {
  color: rgba(0, 0, 0, 0.73);
  border-color: rgba(0, 0, 0, 0.12); }
md-input-group.md-red-theme.md-input-focused input, md-input-group.md-red-theme.md-input-focused textarea {
  border-color: #e51c23; }
md-input-group.md-red-theme.md-input-focused label {
  color: #e51c23; }
md-input-group.md-red-theme.md-input-has-value:not(.md-input-focused) label {
  color: rgba(0, 0, 0, 0.372); }
md-input-group.md-red-theme[disabled] input, md-input-group.md-red-theme[disabled] textarea {
  border-bottom-color: rgba(0, 0, 0, 0.12);
  color: rgba(0, 0, 0, 0.26);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.19) 0%, rgba(0, 0, 0, 0.19) 50%, rgba(0, 0, 0, 0) 0%); }

md-toast.md-red-theme {
  background-color: #323232;
  color: white; }
  md-toast.md-red-theme .md-button {
    color: white; }
  md-toast.md-red-theme .md-action {
    color: #ff5177; }

md-toolbar.md-red-theme {
  background-color: #e51c23;
  color: white; }

md-tooltip.md-red-theme {
  color: #ffffff; }
  md-tooltip.md-red-theme .md-background {
    background-color: rgba(0, 0, 0, 0.52); }
/*!
 * Angular Material Design
 * https://github.com/angular/material
 * @license MIT
 * v0.5.1
 */*,:after,:before{box-sizing:border-box}:focus{outline:0}body,html{height:100%;color:rgba(0,0,0,.73);background:#fff;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body p,html p{line-height:1.846}body h3,html h3{display:block;-webkit-margin-before:1em;-webkit-margin-after:1em;-webkit-margin-start:0;-webkit-margin-end:0;font-size:1.17em;font-weight:700}button,html,input,select,textarea{font-family:RobotoDraft,'Helvetica Neue',Helvetica,Arial}body{margin:0;padding:0;outline:0}.inset{padding:10px}a{background:0 0;outline:0}h1{font-size:2em;margin:.67em 0}h2{font-size:1.5em;margin:.83em 0}h3{font-size:1.17em;margin:1em 0}h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.75em;margin:2.33em 0}button,input,select,textarea{margin:0;font-size:100%;font-family:inherit;vertical-align:baseline}button,html input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[type=button][disabled],input[type=reset][disabled],input[type=submit][disabled]{cursor:default}textarea{vertical-align:top;overflow:auto}input[type=checkbox],input[type=radio]{padding:0;box-sizing:border-box}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box;-webkit-box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}@font-face{font-family:RobotoDraft;font-style:normal;font-weight:100;src:local('RobotoDraft Thin'),local('RobotoDraft-Thin'),url(//fonts.gstatic.com/s/robotodraft/v1/hope9NW9iJ5hh8P5PM_EAyeJLMOzE6CCkidNEpZOseY.woff) format('woff')}@font-face{font-family:RobotoDraft;font-style:normal;font-weight:300;src:local('RobotoDraft Light'),local('RobotoDraft-Light'),url(//fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwR_xHqYgAV9Bl_ZQbYUxnQU.woff) format('woff')}@font-face{font-family:RobotoDraft;font-style:normal;font-weight:400;src:local('RobotoDraft'),local('RobotoDraft-Regular'),url(//fonts.gstatic.com/s/robotodraft/v1/0xES5Sl_v6oyT7dAKuoni4bN6UDyHWBl620a-IRfuBk.woff) format('woff')}@font-face{font-family:RobotoDraft;font-style:normal;font-weight:500;src:local('RobotoDraft Medium'),local('RobotoDraft-Medium'),url(//fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwSqHEX2q--o2so14pIEl08w.woff) format('woff')}@font-face{font-family:RobotoDraft;font-style:normal;font-weight:700;src:local('RobotoDraft Bold'),local('RobotoDraft-Bold'),url(//fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwTqR_3kx9_hJXbbyU8S6IN0.woff) format('woff')}@font-face{font-family:RobotoDraft;font-style:normal;font-weight:900;src:local('RobotoDraft Black'),local('RobotoDraft-Black'),url(//fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwUExzZ44ka2Lr5i-x5aWr0E.woff) format('woff')}@font-face{font-family:RobotoDraft;font-style:italic;font-weight:400;src:local('RobotoDraft Italic'),local('RobotoDraft-Italic'),url(//fonts.gstatic.com/s/robotodraft/v1/er-TIW55l9KWsTS1x9bTftkZXW4sYc4BjuAIFc1SXII.woff) format('woff')}@font-face{font-family:RobotoDraft;font-style:italic;font-weight:700;src:local('RobotoDraft Bold Italic'),local('RobotoDraft-BoldItalic'),url(//fonts.gstatic.com/s/robotodraft/v1/5SAvdU0uYYlH8OURAykt5wRV2F9RPTaqyJ4QibDfkzM.woff) format('woff')}.md-shadow{position:absolute;top:0;left:0;bottom:0;right:0;border-radius:inherit;pointer-events:none}.md-button.md-fab,.md-button.md-raised:not([disabled]),.md-shadow-bottom-z-1{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.md-button.md-fab:not([disabled]):focus,.md-button.md-fab:not([disabled]):hover,.md-button.md-raised:not([disabled]):focus,.md-button.md-raised:not([disabled]):hover,.md-shadow-bottom-z-2{box-shadow:0 4px 8px 0 rgba(0,0,0,.4)}.md-shadow-animated.md-shadow{transition:box-shadow .28s cubic-bezier(0.4,0,.2,1)}[layout]{box-sizing:border-box;display:-webkit-flex;display:-ms-flexbox;display:flex}[layout=vertical]{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}[layout-padding],[layout][layout-padding]>[flex]{padding:8px}[layout-padding]+[layout-padding]{margin-top:-8px;padding-top:0}[layout-fill]{margin:0;min-height:100%;width:100%}[layout-align="center center"],[layout-align="center start"],[layout-align="center end"],[layout-align=center]{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}[layout-align="end center"],[layout-align="end start"],[layout-align="end end"],[layout-align=end]{-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}[layout-align="space-around center"],[layout-align="space-around start"],[layout-align="space-around end"],[layout-align=space-around]{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}[layout-align="space-between center"],[layout-align="space-between start"],[layout-align="space-between end"],[layout-align=space-between]{-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}[layout-align="center center"],[layout-align="end center"],[layout-align="space-around center"],[layout-align="space-between center"],[layout-align="start center"]{-webkit-align-items:center;-ms-flex-align:center;align-items:center}[layout-align="center start"],[layout-align="end start"],[layout-align="space-around start"],[layout-align="space-between start"],[layout-align="start start"]{-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}[layout-align="center end"],[layout-align="end end"],[layout-align="space-around end"],[layout-align="space-between end"],[layout-align="start end"]{-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}[block]{display:block}[inline-block]{display:inline-block}[hide]{display:none}[show]{display:inherit}[flex]{-webkit-flex:1;-ms-flex:1;flex:1}[flex="5"]{-webkit-flex:0 0 5%;-ms-flex:0 0 5%;flex:0 0 5%;max-width:5%}[flex="10"]{-webkit-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%;max-width:10%}[flex="15"]{-webkit-flex:0 0 15%;-ms-flex:0 0 15%;flex:0 0 15%;max-width:15%}[flex="20"]{-webkit-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}[flex="25"]{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}[flex="30"]{-webkit-flex:0 0 30%;-ms-flex:0 0 30%;flex:0 0 30%;max-width:30%}[flex="35"]{-webkit-flex:0 0 35%;-ms-flex:0 0 35%;flex:0 0 35%;max-width:35%}[flex="40"]{-webkit-flex:0 0 40%;-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}[flex="45"]{-webkit-flex:0 0 45%;-ms-flex:0 0 45%;flex:0 0 45%;max-width:45%}[flex="50"]{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}[flex="55"]{-webkit-flex:0 0 55%;-ms-flex:0 0 55%;flex:0 0 55%;max-width:55%}[flex="60"]{-webkit-flex:0 0 60%;-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}[flex="65"]{-webkit-flex:0 0 65%;-ms-flex:0 0 65%;flex:0 0 65%;max-width:65%}[flex="70"]{-webkit-flex:0 0 70%;-ms-flex:0 0 70%;flex:0 0 70%;max-width:70%}[flex="75"]{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}[flex="80"]{-webkit-flex:0 0 80%;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}[flex="85"]{-webkit-flex:0 0 85%;-ms-flex:0 0 85%;flex:0 0 85%;max-width:85%}[flex="90"]{-webkit-flex:0 0 90%;-ms-flex:0 0 90%;flex:0 0 90%;max-width:90%}[flex="95"]{-webkit-flex:0 0 95%;-ms-flex:0 0 95%;flex:0 0 95%;max-width:95%}[flex="33"],[flex="34"]{-webkit-flex:0 0 33.33%;-ms-flex:0 0 33.33%;flex:0 0 33.33%;max-width:33.33%}[flex="66"],[flex="67"]{-webkit-flex:0 0 66.66%;-ms-flex:0 0 66.66%;flex:0 0 66.66%;max-width:66.66%}[offset="5"]{margin-left:5%}[offset="10"]{margin-left:10%}[offset="15"]{margin-left:15%}[offset="20"]{margin-left:20%}[offset="25"]{margin-left:25%}[offset="30"]{margin-left:30%}[offset="35"]{margin-left:35%}[offset="40"]{margin-left:40%}[offset="45"]{margin-left:45%}[offset="50"]{margin-left:50%}[offset="55"]{margin-left:55%}[offset="60"]{margin-left:60%}[offset="65"]{margin-left:65%}[offset="70"]{margin-left:70%}[offset="75"]{margin-left:75%}[offset="80"]{margin-left:80%}[offset="85"]{margin-left:85%}[offset="90"]{margin-left:90%}[offset="95"]{margin-left:95%}[offset="33"],[offset="34"]{margin-left:33.33%}[offset="66"],[offset="67"]{margin-left:66.66%}[layout-order="1"]{-webkit-order:1;-ms-flex-order:1;order:1}[layout-order="2"]{-webkit-order:2;-ms-flex-order:2;order:2}[layout-order="3"]{-webkit-order:3;-ms-flex-order:3;order:3}[layout-order="4"]{-webkit-order:4;-ms-flex-order:4;order:4}[layout-order="5"]{-webkit-order:5;-ms-flex-order:5;order:5}[layout-order="6"]{-webkit-order:6;-ms-flex-order:6;order:6}@media (min-width:600px){[flex-sm]{-webkit-flex:1;-ms-flex:1;flex:1}[flex-sm="5"]{-webkit-flex:0 0 5%;-ms-flex:0 0 5%;flex:0 0 5%;max-width:5%}[flex-sm="10"]{-webkit-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%;max-width:10%}[flex-sm="15"]{-webkit-flex:0 0 15%;-ms-flex:0 0 15%;flex:0 0 15%;max-width:15%}[flex-sm="20"]{-webkit-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}[flex-sm="25"]{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}[flex-sm="30"]{-webkit-flex:0 0 30%;-ms-flex:0 0 30%;flex:0 0 30%;max-width:30%}[flex-sm="35"]{-webkit-flex:0 0 35%;-ms-flex:0 0 35%;flex:0 0 35%;max-width:35%}[flex-sm="40"]{-webkit-flex:0 0 40%;-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}[flex-sm="45"]{-webkit-flex:0 0 45%;-ms-flex:0 0 45%;flex:0 0 45%;max-width:45%}[flex-sm="50"]{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}[flex-sm="55"]{-webkit-flex:0 0 55%;-ms-flex:0 0 55%;flex:0 0 55%;max-width:55%}[flex-sm="60"]{-webkit-flex:0 0 60%;-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}[flex-sm="65"]{-webkit-flex:0 0 65%;-ms-flex:0 0 65%;flex:0 0 65%;max-width:65%}[flex-sm="70"]{-webkit-flex:0 0 70%;-ms-flex:0 0 70%;flex:0 0 70%;max-width:70%}[flex-sm="75"]{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}[flex-sm="80"]{-webkit-flex:0 0 80%;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}[flex-sm="85"]{-webkit-flex:0 0 85%;-ms-flex:0 0 85%;flex:0 0 85%;max-width:85%}[flex-sm="90"]{-webkit-flex:0 0 90%;-ms-flex:0 0 90%;flex:0 0 90%;max-width:90%}[flex-sm="95"]{-webkit-flex:0 0 95%;-ms-flex:0 0 95%;flex:0 0 95%;max-width:95%}[flex-sm="33"],[flex-sm="34"]{-webkit-flex:0 0 33.33%;-ms-flex:0 0 33.33%;flex:0 0 33.33%;max-width:33.33%}[flex-sm="66"],[flex-sm="67"]{-webkit-flex:0 0 66.66%;-ms-flex:0 0 66.66%;flex:0 0 66.66%;max-width:66.66%}[offset-sm="5"]{margin-left:5%}[offset-sm="10"]{margin-left:10%}[offset-sm="15"]{margin-left:15%}[offset-sm="20"]{margin-left:20%}[offset-sm="25"]{margin-left:25%}[offset-sm="30"]{margin-left:30%}[offset-sm="35"]{margin-left:35%}[offset-sm="40"]{margin-left:40%}[offset-sm="45"]{margin-left:45%}[offset-sm="50"]{margin-left:50%}[offset-sm="55"]{margin-left:55%}[offset-sm="60"]{margin-left:60%}[offset-sm="65"]{margin-left:65%}[offset-sm="70"]{margin-left:70%}[offset-sm="75"]{margin-left:75%}[offset-sm="80"]{margin-left:80%}[offset-sm="85"]{margin-left:85%}[offset-sm="90"]{margin-left:90%}[offset-sm="95"]{margin-left:95%}[offset-sm="33"],[offset-sm="34"]{margin-left:33.33%}[offset-sm="66"],[offset-sm="67"]{margin-left:66.66%}[layout-order-sm="1"]{-webkit-order:1;-ms-flex-order:1;order:1}[layout-order-sm="2"]{-webkit-order:2;-ms-flex-order:2;order:2}[layout-order-sm="3"]{-webkit-order:3;-ms-flex-order:3;order:3}[layout-order-sm="4"]{-webkit-order:4;-ms-flex-order:4;order:4}[layout-order-sm="5"]{-webkit-order:5;-ms-flex-order:5;order:5}[layout-order-sm="6"]{-webkit-order:6;-ms-flex-order:6;order:6}[layout-sm]{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}[layout-sm=vertical]{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}[block-sm]{display:block}[inline-block-sm]{display:inline-block}[show-sm]{display:inherit}[hide-sm]{display:none}}@media (min-width:960px){[flex-md]{-webkit-flex:1;-ms-flex:1;flex:1}[flex-md="5"]{-webkit-flex:0 0 5%;-ms-flex:0 0 5%;flex:0 0 5%;max-width:5%}[flex-md="10"]{-webkit-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%;max-width:10%}[flex-md="15"]{-webkit-flex:0 0 15%;-ms-flex:0 0 15%;flex:0 0 15%;max-width:15%}[flex-md="20"]{-webkit-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}[flex-md="25"]{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}[flex-md="30"]{-webkit-flex:0 0 30%;-ms-flex:0 0 30%;flex:0 0 30%;max-width:30%}[flex-md="35"]{-webkit-flex:0 0 35%;-ms-flex:0 0 35%;flex:0 0 35%;max-width:35%}[flex-md="40"]{-webkit-flex:0 0 40%;-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}[flex-md="45"]{-webkit-flex:0 0 45%;-ms-flex:0 0 45%;flex:0 0 45%;max-width:45%}[flex-md="50"]{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}[flex-md="55"]{-webkit-flex:0 0 55%;-ms-flex:0 0 55%;flex:0 0 55%;max-width:55%}[flex-md="60"]{-webkit-flex:0 0 60%;-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}[flex-md="65"]{-webkit-flex:0 0 65%;-ms-flex:0 0 65%;flex:0 0 65%;max-width:65%}[flex-md="70"]{-webkit-flex:0 0 70%;-ms-flex:0 0 70%;flex:0 0 70%;max-width:70%}[flex-md="75"]{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}[flex-md="80"]{-webkit-flex:0 0 80%;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}[flex-md="85"]{-webkit-flex:0 0 85%;-ms-flex:0 0 85%;flex:0 0 85%;max-width:85%}[flex-md="90"]{-webkit-flex:0 0 90%;-ms-flex:0 0 90%;flex:0 0 90%;max-width:90%}[flex-md="95"]{-webkit-flex:0 0 95%;-ms-flex:0 0 95%;flex:0 0 95%;max-width:95%}[flex-md="33"],[flex-md="34"]{-webkit-flex:0 0 33.33%;-ms-flex:0 0 33.33%;flex:0 0 33.33%;max-width:33.33%}[flex-md="66"],[flex-md="67"]{-webkit-flex:0 0 66.66%;-ms-flex:0 0 66.66%;flex:0 0 66.66%;max-width:66.66%}[offset-md="5"]{margin-left:5%}[offset-md="10"]{margin-left:10%}[offset-md="15"]{margin-left:15%}[offset-md="20"]{margin-left:20%}[offset-md="25"]{margin-left:25%}[offset-md="30"]{margin-left:30%}[offset-md="35"]{margin-left:35%}[offset-md="40"]{margin-left:40%}[offset-md="45"]{margin-left:45%}[offset-md="50"]{margin-left:50%}[offset-md="55"]{margin-left:55%}[offset-md="60"]{margin-left:60%}[offset-md="65"]{margin-left:65%}[offset-md="70"]{margin-left:70%}[offset-md="75"]{margin-left:75%}[offset-md="80"]{margin-left:80%}[offset-md="85"]{margin-left:85%}[offset-md="90"]{margin-left:90%}[offset-md="95"]{margin-left:95%}[offset-md="33"],[offset-md="34"]{margin-left:33.33%}[offset-md="66"],[offset-md="67"]{margin-left:66.66%}[layout-order-md="1"]{-webkit-order:1;-ms-flex-order:1;order:1}[layout-order-md="2"]{-webkit-order:2;-ms-flex-order:2;order:2}[layout-order-md="3"]{-webkit-order:3;-ms-flex-order:3;order:3}[layout-order-md="4"]{-webkit-order:4;-ms-flex-order:4;order:4}[layout-order-md="5"]{-webkit-order:5;-ms-flex-order:5;order:5}[layout-order-md="6"]{-webkit-order:6;-ms-flex-order:6;order:6}[layout-md]{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}[layout-md=vertical]{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}[block-md]{display:block}[inline-block-md]{display:inline-block}[show-md]{display:inherit}[hide-md]{display:none}}@media (min-width:1200px){[flex-lg]{-webkit-flex:1;-ms-flex:1;flex:1}[flex-lg="5"]{-webkit-flex:0 0 5%;-ms-flex:0 0 5%;flex:0 0 5%;max-width:5%}[flex-lg="10"]{-webkit-flex:0 0 10%;-ms-flex:0 0 10%;flex:0 0 10%;max-width:10%}[flex-lg="15"]{-webkit-flex:0 0 15%;-ms-flex:0 0 15%;flex:0 0 15%;max-width:15%}[flex-lg="20"]{-webkit-flex:0 0 20%;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}[flex-lg="25"]{-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}[flex-lg="30"]{-webkit-flex:0 0 30%;-ms-flex:0 0 30%;flex:0 0 30%;max-width:30%}[flex-lg="35"]{-webkit-flex:0 0 35%;-ms-flex:0 0 35%;flex:0 0 35%;max-width:35%}[flex-lg="40"]{-webkit-flex:0 0 40%;-ms-flex:0 0 40%;flex:0 0 40%;max-width:40%}[flex-lg="45"]{-webkit-flex:0 0 45%;-ms-flex:0 0 45%;flex:0 0 45%;max-width:45%}[flex-lg="50"]{-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}[flex-lg="55"]{-webkit-flex:0 0 55%;-ms-flex:0 0 55%;flex:0 0 55%;max-width:55%}[flex-lg="60"]{-webkit-flex:0 0 60%;-ms-flex:0 0 60%;flex:0 0 60%;max-width:60%}[flex-lg="65"]{-webkit-flex:0 0 65%;-ms-flex:0 0 65%;flex:0 0 65%;max-width:65%}[flex-lg="70"]{-webkit-flex:0 0 70%;-ms-flex:0 0 70%;flex:0 0 70%;max-width:70%}[flex-lg="75"]{-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}[flex-lg="80"]{-webkit-flex:0 0 80%;-ms-flex:0 0 80%;flex:0 0 80%;max-width:80%}[flex-lg="85"]{-webkit-flex:0 0 85%;-ms-flex:0 0 85%;flex:0 0 85%;max-width:85%}[flex-lg="90"]{-webkit-flex:0 0 90%;-ms-flex:0 0 90%;flex:0 0 90%;max-width:90%}[flex-lg="95"]{-webkit-flex:0 0 95%;-ms-flex:0 0 95%;flex:0 0 95%;max-width:95%}[flex-lg="33"],[flex-lg="34"]{-webkit-flex:0 0 33.33%;-ms-flex:0 0 33.33%;flex:0 0 33.33%;max-width:33.33%}[flex-lg="66"],[flex-lg="67"]{-webkit-flex:0 0 66.66%;-ms-flex:0 0 66.66%;flex:0 0 66.66%;max-width:66.66%}[offset-lg="5"]{margin-left:5%}[offset-lg="10"]{margin-left:10%}[offset-lg="15"]{margin-left:15%}[offset-lg="20"]{margin-left:20%}[offset-lg="25"]{margin-left:25%}[offset-lg="30"]{margin-left:30%}[offset-lg="35"]{margin-left:35%}[offset-lg="40"]{margin-left:40%}[offset-lg="45"]{margin-left:45%}[offset-lg="50"]{margin-left:50%}[offset-lg="55"]{margin-left:55%}[offset-lg="60"]{margin-left:60%}[offset-lg="65"]{margin-left:65%}[offset-lg="70"]{margin-left:70%}[offset-lg="75"]{margin-left:75%}[offset-lg="80"]{margin-left:80%}[offset-lg="85"]{margin-left:85%}[offset-lg="90"]{margin-left:90%}[offset-lg="95"]{margin-left:95%}[offset-lg="33"],[offset-lg="34"]{margin-left:33.33%}[offset-lg="66"],[offset-lg="67"]{margin-left:66.66%}[layout-order-lg="1"]{-webkit-order:1;-ms-flex-order:1;order:1}[layout-order-lg="2"]{-webkit-order:2;-ms-flex-order:2;order:2}[layout-order-lg="3"]{-webkit-order:3;-ms-flex-order:3;order:3}[layout-order-lg="4"]{-webkit-order:4;-ms-flex-order:4;order:4}[layout-order-lg="5"]{-webkit-order:5;-ms-flex-order:5;order:5}[layout-order-lg="6"]{-webkit-order:6;-ms-flex-order:6;order:6}[layout-lg]{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}[layout-lg=vertical]{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}[block-lg]{display:block}[inline-block-lg]{display:inline-block}[show-lg]{display:inherit}[hide-lg]{display:none}}@-webkit-keyframes inkRippleButton{0%{-webkit-transform:scale(0);transform:scale(0);opacity:.15}50%{-webkit-transform:scale(0.75);transform:scale(0.75);opacity:.15}100%{-webkit-transform:scale(2);transform:scale(2);opacity:0}}@keyframes inkRippleButton{0%{-webkit-transform:scale(0);transform:scale(0);opacity:.15}50%{-webkit-transform:scale(0.75);transform:scale(0.75);opacity:.15}100%{-webkit-transform:scale(2);transform:scale(2);opacity:0}}@-webkit-keyframes inkRippleCheckbox{0%{-webkit-transform:scale(0);transform:scale(0);opacity:.4}50%{-webkit-transform:scale(1);transform:scale(1);opacity:.4}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}@keyframes inkRippleCheckbox{0%{-webkit-transform:scale(0);transform:scale(0);opacity:.4}50%{-webkit-transform:scale(1);transform:scale(1);opacity:.4}100%{-webkit-transform:scale(1);transform:scale(1);opacity:0}}.md-ripple-container{pointer-events:none;position:absolute;overflow:hidden;left:0;top:0;width:100%;height:100%}.md-ripple{position:absolute}md-backdrop{z-index:5;background-color:transparent;position:fixed;left:0;top:0;right:0;bottom:0;transition:all .2s ease-out}md-backdrop.ng-enter{transition-delay:.1s}md-backdrop.ng-enter,md-backdrop.ng-leave.ng-leave-active{opacity:0}md-backdrop.ng-enter.ng-enter-active,md-backdrop.ng-leave{opacity:1}md-bottom-sheet{position:absolute;left:0;right:0;bottom:0;padding:8px 16px 88px;z-index:8;border-top:1px solid;-webkit-transform:translate3d(0,80px,0);transform:translate3d(0,80px,0);transition:.2s linear;transition-property:-webkit-transform;transition-property:transform}md-bottom-sheet.md-has-header{padding-top:0}md-bottom-sheet.ng-enter{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}md-bottom-sheet.ng-enter-active{opacity:1;display:block;-webkit-transform:translate3d(0,80px,0)!important;transform:translate3d(0,80px,0)!important}md-bottom-sheet.ng-leave-active{-webkit-transform:translate3d(0,100%,0)!important;transform:translate3d(0,100%,0)!important}md-bottom-sheet .md-subheader{background-color:transparent;font-family:RobotoDraft,'Helvetica Neue',Helvetica,Arial;line-height:56px;padding:0;white-space:nowrap}md-bottom-sheet md-inline-icon{display:inline-block;height:24px;width:24px;fill:#444}md-bottom-sheet md-item{display:-webkit-flex;display:-ms-flexbox;display:flex;outline:0}md-bottom-sheet md-item:hover{cursor:pointer}md-bottom-sheet.md-list md-item{-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:48px}md-bottom-sheet.md-list md-item div.md-icon-container{display:inline-block;height:24px;margin-right:32px}md-bottom-sheet.md-grid{padding-left:24px;padding-right:24px;padding-top:0}md-bottom-sheet.md-grid md-list{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;transition:all .5s;-webkit-align-items:center;-ms-flex-align:center;align-items:center}md-bottom-sheet.md-grid md-item{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-ms-flex-align:center;align-items:center;transition:all .5s;height:96px;margin-top:8px;margin-bottom:8px}@media screen and (max-width:600px){md-bottom-sheet.md-grid md-item{-webkit-flex:1 1 33.33333%;-ms-flex:1 1 33.33333%;flex:1 1 33.33333%;max-width:33.33333%}md-bottom-sheet.md-grid md-item:nth-of-type(3n+1){-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}md-bottom-sheet.md-grid md-item:nth-of-type(3n){-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media screen and (min-width:600px) and (max-width:960px){md-bottom-sheet.md-grid md-item{-webkit-flex:1 1 25%;-ms-flex:1 1 25%;flex:1 1 25%;max-width:25%}}@media screen and (min-width:960px) and (max-width:1200px){md-bottom-sheet.md-grid md-item{-webkit-flex:1 1 16.66667%;-ms-flex:1 1 16.66667%;flex:1 1 16.66667%;max-width:16.66667%}}@media screen and (min-width:1200px){md-bottom-sheet.md-grid md-item{-webkit-flex:1 1 14.28571%;-ms-flex:1 1 14.28571%;flex:1 1 14.28571%;max-width:14.28571%}}md-bottom-sheet.md-grid md-item .md-item-content{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:48px;padding-bottom:16px}md-bottom-sheet.md-grid md-item .md-grid-item-content{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:80px}md-bottom-sheet.md-grid md-item .md-icon-container{display:inline-block;box-sizing:border-box;height:48px;width:48px;margin:0}md-bottom-sheet.md-grid md-item p.md-grid-text{font-weight:300;line-height:16px;font-size:13px;margin:0;white-space:nowrap;width:64px;text-align:center;padding-top:8px}.md-button{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:inline-block;outline:0;border:0;padding:6px;margin:0;background:0 0;white-space:nowrap;text-align:center;text-transform:uppercase;font-weight:inherit;font-style:inherit;font-variant:inherit;font-size:inherit;font-family:inherit;line-height:inherit;text-decoration:none;cursor:pointer;overflow:hidden}.md-button.md-cornered{border-radius:0}.md-button.md-icon{padding:0;background:0 0}.md-button.md-raised{transition:.2s linear;transition-property:box-shadow,-webkit-transform,background-color;transition-property:box-shadow,transform,background-color;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.md-button.md-fab{z-index:2;width:56px;height:56px;border-radius:50%;overflow:hidden;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);transition:.2s linear;transition-property:-webkit-transform,box-shadow;transition-property:transform,box-shadow}.md-button.md-fab.md-fab-bottom-right{top:auto;right:28px;bottom:28px;left:auto;position:absolute}.md-button.md-fab.md-fab-bottom-left{top:auto;right:auto;bottom:28px;left:28px;position:absolute}.md-button.md-fab.md-fab-top-right{top:28px;right:28px;bottom:auto;left:auto;position:absolute}.md-button.md-fab.md-fab-top-left{top:28px;right:auto;bottom:auto;left:28px;position:absolute}.md-button:not([disabled]).md-fab:focus,.md-button:not([disabled]).md-fab:hover,.md-button:not([disabled]).md-raised:focus,.md-button:not([disabled]).md-raised:hover{-webkit-transform:translate3d(0,-1px,0);transform:translate3d(0,-1px,0)}.md-toast-open-top .md-button.md-fab-top-left,.md-toast-open-top .md-button.md-fab-top-right{-webkit-transform:translate3d(0,32px,0);transform:translate3d(0,32px,0)}.md-toast-open-top .md-button.md-fab-top-left:not([disabled]):focus,.md-toast-open-top .md-button.md-fab-top-left:not([disabled]):hover,.md-toast-open-top .md-button.md-fab-top-right:not([disabled]):focus,.md-toast-open-top .md-button.md-fab-top-right:not([disabled]):hover{-webkit-transform:translate3d(0,31px,0);transform:translate3d(0,31px,0)}.md-toast-open-bottom .md-button.md-fab-bottom-left,.md-toast-open-bottom .md-button.md-fab-bottom-right{-webkit-transform:translate3d(0,-32px,0);transform:translate3d(0,-32px,0)}.md-toast-open-bottom .md-button.md-fab-bottom-left:not([disabled]):focus,.md-toast-open-bottom .md-button.md-fab-bottom-left:not([disabled]):hover,.md-toast-open-bottom .md-button.md-fab-bottom-right:not([disabled]):focus,.md-toast-open-bottom .md-button.md-fab-bottom-right:not([disabled]):hover{-webkit-transform:translate3d(0,-33px,0);transform:translate3d(0,-33px,0)}.md-button-group{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;width:100%}.md-button-group>.md-button{-webkit-flex:1;-ms-flex:1;flex:1;display:block;overflow:hidden;width:0;border-width:1px 0 1px 1px;border-radius:0;text-align:center;text-overflow:ellipsis;white-space:nowrap}.md-button-group>.md-button:first-child{border-radius:2px 0 0 2px}.md-button-group>.md-button:last-child{border-right-width:1px;border-radius:0 2px 2px 0}md-card{display:block;box-sizing:border-box;box-shadow:0 2px 5px 0 rgba(0,0,0,.26);margin:8px;padding:8px}md-card .md-card-image{display:block;width:100%}md-checkbox{display:block;margin:15px;white-space:nowrap;cursor:pointer;outline:0}md-checkbox .md-container{position:relative;top:4px;display:inline-block;width:18px;height:18px}md-checkbox .md-container .md-ripple-container{position:absolute;display:block;width:54px;height:54px;left:-18px;top:-18px}md-checkbox .md-icon{transition:240ms;position:absolute;top:0;left:0;width:18px;height:18px;border:2px solid;border-radius:2px}md-checkbox.md-checked .md-icon{border:none}md-checkbox[disabled]{cursor:no-drop}md-checkbox:focus .md-label{border-color:#000}md-checkbox.md-checked .md-icon:after{-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;left:6px;top:2px;display:table;width:6px;height:12px;border:2px solid;border-top:0;border-left:0;content:' '}md-checkbox .md-label{border:1px dotted transparent;position:relative;display:inline-block;margin-left:10px;vertical-align:middle;white-space:normal;pointer-events:none}md-content{display:block;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}md-content[scroll-y]{overflow-y:auto;overflow-x:hidden}md-content[scroll-x]{overflow-x:auto;overflow-y:hidden}md-content.md-padding{padding:8px}@media (min-width:600px){md-content.md-padding{padding:16px}}.md-dialog-container{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;left:0;top:0;right:0;bottom:0;z-index:10}.md-dialog-container.md-active{transition:all .2s cubic-bezier(0.4,0,.2,1);-webkit-transform:translate3d(0,0,0) scale(1);transform:translate3d(0,0,0) scale(1);opacity:1}.md-dialog-container.ng-leave.ng-leave-active{-webkit-transform:translate3d(0,100%,0) scale(0.5);transform:translate3d(0,100%,0) scale(0.5);opacity:0}md-dialog{min-width:240px;max-width:80%;max-height:80%;margin:auto;position:relative;box-shadow:0 27px 24px 0 rgba(0,0,0,.2);display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}md-dialog md-content{-webkit-order:1;-ms-flex-order:1;order:1;padding:24px;overflow:auto;-webkit-overflow-scrolling:touch}md-dialog md-content :first-child{margin-top:0}md-dialog .md-actions{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-order:2;-ms-flex-order:2;order:2;box-sizing:border-box;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding:16px;min-height:40px}md-dialog .md-actions>*{margin-left:8px}md-dialog.md-content-overflow .md-actions{border-top:1px solid}md-divider{display:block;border-top:1px solid;margin:0}md-divider[inset]{margin-left:80px}md-icon{margin:5px auto auto;padding:0;display:inline-block;background-repeat:no-repeat no-repeat;pointer-events:none}object,svg{fill:currentColor;color:currentColor}md-list{padding:8px 0}md-item-content{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;box-sizing:border-box;position:relative;padding:0}.md-tile-left{min-width:56px;margin-right:-16px}.md-tile-content{-webkit-flex:1;-ms-flex:1;flex:1;padding:16px;text-overflow:ellipsis}.md-tile-content h3{margin:0 0 3px;font-weight:400;font-size:1.1em}.md-tile-content h4{margin:0 0 3px;font-weight:400;font-size:.9em}.md-tile-content p{margin:0 0 3px;font-size:.75em}.md-tile-right{padding-right:0}md-progress-circular{display:block;width:54px;height:54px;border-radius:50%;padding:3px}md-progress-circular .md-circle .md-fill,md-progress-circular .md-circle .md-mask,md-progress-circular .md-circle .md-shadow,md-progress-circular .md-wrapper1,md-progress-circular .md-wrapper2{width:48px;height:48px;position:absolute;border-radius:50%}md-progress-circular .md-circle .md-fill,md-progress-circular .md-circle .md-mask{-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .3s;transition:transform .3s}md-progress-circular .md-circle .md-mask{clip:rect(0,48px,48px,24px)}md-progress-circular .md-circle .md-mask .md-fill{clip:rect(0,24px,48px,0)}md-progress-circular .md-inset{width:36px;height:36px;position:absolute;margin-left:6px;margin-top:6px;border-radius:50%}md-progress-circular[mode=indeterminate] .md-wrapper1,md-progress-circular[mode=indeterminate] .md-wrapper2{-webkit-transform-origin:50% 50%;transform-origin:50% 50%}md-progress-circular[mode=indeterminate] .md-wrapper1{-webkit-animation:indeterminate_rotate1 3s infinite linear;animation:indeterminate_rotate1 3s infinite linear}md-progress-circular[mode=indeterminate] .md-wrapper2{-webkit-animation:indeterminate_rotate2 1.5s infinite linear;animation:indeterminate_rotate2 1.5s infinite linear}md-progress-circular[mode=indeterminate] .md-fill,md-progress-circular[mode=indeterminate] .md-mask.md-full{-webkit-animation:indeterminate_size_fill 1.5s infinite linear;animation:indeterminate_size_fill 1.5s infinite linear}md-progress-circular[mode=indeterminate] .md-fill.md-fix{-webkit-animation:indeterminate_size_fix 1.5s infinite linear;animation:indeterminate_size_fix 1.5s infinite linear}@-webkit-keyframes indeterminate_rotate1{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes indeterminate_rotate1{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes indeterminate_rotate2{0%,70%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes indeterminate_rotate2{0%,70%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes indeterminate_size_fill{0%,10%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}50%,70%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}100%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}}@keyframes indeterminate_size_fill{0%,10%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}50%,70%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}100%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}}@-webkit-keyframes indeterminate_size_fix{0%,10%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}50%,70%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}@keyframes indeterminate_size_fix{0%,10%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}50%,70%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}100%{-webkit-transform:rotate(10deg);transform:rotate(10deg)}}md-progress-linear{display:block;width:100%;height:5px}md-progress-linear .md-container{overflow:hidden;position:relative;height:5px;top:5px;-webkit-transform:translate(0,5px) scale(1,0);transform:translate(0,5px) scale(1,0);transition:all .3s linear}md-progress-linear .md-container.md-ready{-webkit-transform:translate(0,0) scale(1,1);transform:translate(0,0) scale(1,1)}md-progress-linear .md-bar{height:5px;position:absolute;width:100%}md-progress-linear .md-bar1,md-progress-linear .md-bar2{transition:all .2s linear}md-progress-linear[mode=determinate] .md-bar1{display:none}md-progress-linear[mode=indeterminate] .md-bar1{-webkit-animation:indeterminate1 4s infinite linear;animation:indeterminate1 4s infinite linear}md-progress-linear[mode=indeterminate] .md-bar2{-webkit-animation:indeterminate2 4s infinite linear;animation:indeterminate2 4s infinite linear}md-progress-linear[mode=buffer] .md-container{background-color:transparent!important}md-progress-linear[mode=buffer] .md-dashed:before{content:"";display:block;height:5px;width:100%;margin-top:0;position:absolute;background-color:transparent;background-size:10px 10px!important;background-position:0 -23px;-webkit-animation:buffer 3s infinite linear;animation:buffer 3s infinite linear}md-progress-linear[mode=query] .md-bar2{-webkit-animation:query .8s infinite cubic-bezier(0.39,.575,.565,1);animation:query .8s infinite cubic-bezier(0.39,.575,.565,1)}@-webkit-keyframes indeterminate1{0%{-webkit-transform:translateX(-25%) scale(0.5,1);transform:translateX(-25%) scale(0.5,1)}10%{-webkit-transform:translateX(25%) scale(0.5,1);transform:translateX(25%) scale(0.5,1)}19.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}20%{-webkit-transform:translateX(-37.5%) scale(0.25,1);transform:translateX(-37.5%) scale(0.25,1)}30%{-webkit-transform:translateX(37.5%) scale(0.25,1);transform:translateX(37.5%) scale(0.25,1)}34.99%,36.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}37%{-webkit-transform:translateX(-37.5%) scale(0.25,1);transform:translateX(-37.5%) scale(0.25,1)}47%{-webkit-transform:translateX(20%) scale(0.25,1);transform:translateX(20%) scale(0.25,1)}52%{-webkit-transform:translateX(35%) scale(0.05,1);transform:translateX(35%) scale(0.05,1)}55%{-webkit-transform:translateX(35%) scale(0.1,1);transform:translateX(35%) scale(0.1,1)}58%{-webkit-transform:translateX(50%) scale(0.1,1);transform:translateX(50%) scale(0.1,1)}61.99%,69.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}70%{-webkit-transform:translateX(-37.5%) scale(0.25,1);transform:translateX(-37.5%) scale(0.25,1)}80%{-webkit-transform:translateX(20%) scale(0.25,1);transform:translateX(20%) scale(0.25,1)}85%{-webkit-transform:translateX(35%) scale(0.05,1);transform:translateX(35%) scale(0.05,1)}88%{-webkit-transform:translateX(35%) scale(0.1,1);transform:translateX(35%) scale(0.1,1)}91%{-webkit-transform:translateX(50%) scale(0.1,1);transform:translateX(50%) scale(0.1,1)}92.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}93%{-webkit-transform:translateX(-50%) scale(0,1);transform:translateX(-50%) scale(0,1)}100%{-webkit-transform:translateX(-25%) scale(0.5,1);transform:translateX(-25%) scale(0.5,1)}}@keyframes indeterminate1{0%{-webkit-transform:translateX(-25%) scale(0.5,1);transform:translateX(-25%) scale(0.5,1)}10%{-webkit-transform:translateX(25%) scale(0.5,1);transform:translateX(25%) scale(0.5,1)}19.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}20%{-webkit-transform:translateX(-37.5%) scale(0.25,1);transform:translateX(-37.5%) scale(0.25,1)}30%{-webkit-transform:translateX(37.5%) scale(0.25,1);transform:translateX(37.5%) scale(0.25,1)}34.99%,36.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}37%{-webkit-transform:translateX(-37.5%) scale(0.25,1);transform:translateX(-37.5%) scale(0.25,1)}47%{-webkit-transform:translateX(20%) scale(0.25,1);transform:translateX(20%) scale(0.25,1)}52%{-webkit-transform:translateX(35%) scale(0.05,1);transform:translateX(35%) scale(0.05,1)}55%{-webkit-transform:translateX(35%) scale(0.1,1);transform:translateX(35%) scale(0.1,1)}58%{-webkit-transform:translateX(50%) scale(0.1,1);transform:translateX(50%) scale(0.1,1)}61.99%,69.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}70%{-webkit-transform:translateX(-37.5%) scale(0.25,1);transform:translateX(-37.5%) scale(0.25,1)}80%{-webkit-transform:translateX(20%) scale(0.25,1);transform:translateX(20%) scale(0.25,1)}85%{-webkit-transform:translateX(35%) scale(0.05,1);transform:translateX(35%) scale(0.05,1)}88%{-webkit-transform:translateX(35%) scale(0.1,1);transform:translateX(35%) scale(0.1,1)}91%{-webkit-transform:translateX(50%) scale(0.1,1);transform:translateX(50%) scale(0.1,1)}92.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}93%{-webkit-transform:translateX(-50%) scale(0,1);transform:translateX(-50%) scale(0,1)}100%{-webkit-transform:translateX(-25%) scale(0.5,1);transform:translateX(-25%) scale(0.5,1)}}@-webkit-keyframes indeterminate2{0%,25.99%{-webkit-transform:translateX(-50%) scale(0,1);transform:translateX(-50%) scale(0,1)}28%{-webkit-transform:translateX(-37.5%) scale(0.25,1);transform:translateX(-37.5%) scale(0.25,1)}38%{-webkit-transform:translateX(37.5%) scale(0.25,1);transform:translateX(37.5%) scale(0.25,1)}42.99%,46.99%,49.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}50%{-webkit-transform:translateX(-50%) scale(0,1);transform:translateX(-50%) scale(0,1)}60%{-webkit-transform:translateX(-25%) scale(0.5,1);transform:translateX(-25%) scale(0.5,1)}70%{-webkit-transform:translateX(25%) scale(0.5,1);transform:translateX(25%) scale(0.5,1)}79.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}}@keyframes indeterminate2{0%,25.99%{-webkit-transform:translateX(-50%) scale(0,1);transform:translateX(-50%) scale(0,1)}28%{-webkit-transform:translateX(-37.5%) scale(0.25,1);transform:translateX(-37.5%) scale(0.25,1)}38%{-webkit-transform:translateX(37.5%) scale(0.25,1);transform:translateX(37.5%) scale(0.25,1)}42.99%,46.99%,49.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}50%{-webkit-transform:translateX(-50%) scale(0,1);transform:translateX(-50%) scale(0,1)}60%{-webkit-transform:translateX(-25%) scale(0.5,1);transform:translateX(-25%) scale(0.5,1)}70%{-webkit-transform:translateX(25%) scale(0.5,1);transform:translateX(25%) scale(0.5,1)}79.99%{-webkit-transform:translateX(50%) scale(0,1);transform:translateX(50%) scale(0,1)}}@-webkit-keyframes query{0%{opacity:1;-webkit-transform:translateX(35%) scale(0.3,1);transform:translateX(35%) scale(0.3,1)}100%{opacity:0;-webkit-transform:translateX(-50%) scale(0,1);transform:translateX(-50%) scale(0,1)}}@keyframes query{0%{opacity:1;-webkit-transform:translateX(35%) scale(0.3,1);transform:translateX(35%) scale(0.3,1)}100%{opacity:0;-webkit-transform:translateX(-50%) scale(0,1);transform:translateX(-50%) scale(0,1)}}@-webkit-keyframes buffer{0%{opacity:1;background-position:0 -23px}50%{opacity:0}100%{opacity:1;background-position:-200px -23px}}@keyframes buffer{0%{opacity:1;background-position:0 -23px}50%{opacity:0}100%{opacity:1;background-position:-200px -23px}}.md-switch-thumb,md-radio-button{display:block;margin:15px;white-space:nowrap;cursor:pointer}.md-switch-thumb input,md-radio-button input{display:none}.md-switch-thumb .md-container,md-radio-button .md-container{position:relative;top:4px;display:inline-block;width:16px;height:16px;cursor:pointer}.md-switch-thumb .md-container .md-ripple-container,md-radio-button .md-container .md-ripple-container{position:absolute;display:block;width:48px;height:48px;left:-16px;top:-16px}.md-switch-thumb .md-off,md-radio-button .md-off{position:absolute;top:0;left:0;width:16px;height:16px;border:2px solid;border-radius:50%;transition:border-color ease .28s}.md-switch-thumb .md-on,md-radio-button .md-on{position:absolute;top:0;left:0;width:16px;height:16px;border-radius:50%;transition:-webkit-transform ease .28s;transition:transform ease .28s;-webkit-transform:scale(0);transform:scale(0)}.md-switch-thumb.md-checked .md-on,md-radio-button.md-checked .md-on{-webkit-transform:scale(0.55);transform:scale(0.55)}.md-switch-thumb .md-label,md-radio-button .md-label{position:relative;display:inline-block;margin-left:10px;vertical-align:middle;white-space:normal;pointer-events:none;width:auto}.md-switch-thumb .circle,md-radio-button .circle{border-radius:50%}md-radio-group{border:1px dotted transparent;display:block;outline:0}md-sidenav{position:absolute;width:304px;bottom:0;z-index:6;background-color:#fff;overflow:auto}md-sidenav.md-closed{display:none}md-sidenav.md-closed-add,md-sidenav.md-closed-remove{display:block;transition:0s all}md-sidenav.md-closed-add.md-closed-add-active,md-sidenav.md-closed-remove.md-closed-remove-active{transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out}md-sidenav.md-locked-open,md-sidenav.md-locked-open.md-closed,md-sidenav.md-locked-open.md-closed.md-sidenav-left,md-sidenav.md-locked-open.md-closed.md-sidenav-right{position:static;display:block;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.md-sidenav-backdrop.locked-open{display:none}.md-sidenav-left,md-sidenav{left:0;top:0;-webkit-transform:translate3d(0%,0,0);transform:translate3d(0%,0,0)}.md-sidenav-left.md-closed,md-sidenav.md-closed{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.md-sidenav-right{left:100%;top:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.md-sidenav-right.md-closed{-webkit-transform:translate3d(0%,0,0);transform:translate3d(0%,0,0)}@-webkit-keyframes sliderFocusThumb{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{opacity:0}}@keyframes sliderFocusThumb{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}50%{-webkit-transform:scale(1);transform:scale(1);opacity:1}100%{opacity:0}}md-slider{height:48px;position:relative;display:block;margin-left:4px;margin-right:4px}md-slider .md-track-container{width:100%;position:absolute;top:23px;height:2px}md-slider .md-track{position:absolute;left:0;right:0;height:100%}md-slider .md-track-fill{transition:width .05s linear}md-slider .md-track-ticks{position:absolute;left:0;right:0;height:100%}md-slider .md-thumb-container{position:absolute;left:0;top:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);transition:-webkit-transform .1s linear;transition:transform .1s linear}md-slider .md-thumb{z-index:1;position:absolute;left:-19px;top:5px;width:38px;height:38px;border-radius:38px;-webkit-transform:scale(0.5);transform:scale(0.5);transition:all .1s linear}md-slider .md-thumb:after{content:'';position:absolute;left:3px;top:3px;width:32px;height:32px;border-radius:32px;border:3px solid}md-slider .md-sign{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;left:-14px;top:-20px;width:28px;height:28px;border-radius:28px;-webkit-transform:scale(0.4) translate3d(0,70px,0);transform:scale(0.4) translate3d(0,70px,0);transition:all .2s ease-in-out}md-slider .md-sign:after{position:absolute;content:'';left:0;border-radius:16px;top:19px;border-left:14px solid transparent;border-right:14px solid transparent;border-top:16px solid;opacity:0;-webkit-transform:translate3d(0,-8px,0);transform:translate3d(0,-8px,0);transition:all .2s ease-in-out}md-slider .md-sign .md-thumb-text{z-index:1;font-size:12px;font-weight:700}md-slider .md-focus-thumb{position:absolute;left:-24px;top:0;width:48px;height:48px;border-radius:48px;display:none;opacity:0;background-color:silver;-webkit-animation:sliderFocusThumb .4s linear;animation:sliderFocusThumb .4s linear}md-slider .md-focus-ring{position:absolute;left:-24px;top:0;width:48px;height:48px;border-radius:48px;border:2px solid #D6D6D6;background-color:transparent;-webkit-transform:scale(0);transform:scale(0);transition:all .2s linear}md-slider .md-disabled-thumb{position:absolute;left:-22px;top:2px;width:44px;height:44px;border-radius:44px;-webkit-transform:scale(0.35);transform:scale(0.35);border:6px solid;display:none}md-slider.md-min .md-thumb:after{background-color:#fff}md-slider.md-min .md-sign{opacity:0}md-slider:focus{outline:0}md-slider.panning .md-thumb-container,md-slider.panning .md-track-fill{transition:none}md-slider:not([discrete]) .md-sign,md-slider:not([discrete]) .md-track-ticks{display:none}md-slider:not([discrete]):not([disabled]):hover .md-thumb{-webkit-transform:scale(0.6);transform:scale(0.6)}md-slider:not([discrete]):not([disabled]).active .md-focus-thumb,md-slider:not([discrete]):not([disabled]):focus .md-focus-thumb{display:block}md-slider:not([discrete]):not([disabled]).active .md-focus-ring,md-slider:not([discrete]):not([disabled]):focus .md-focus-ring{-webkit-transform:scale(1);transform:scale(1)}md-slider:not([discrete]):not([disabled]).active .md-thumb,md-slider:not([discrete]):not([disabled]):focus .md-thumb{-webkit-transform:scale(0.85);transform:scale(0.85)}md-slider[discrete] .md-focus-ring,md-slider[discrete] .md-focus-thumb{display:none}md-slider[discrete]:not([disabled]).active .md-sign,md-slider[discrete]:not([disabled]).active .md-sign:after,md-slider[discrete]:not([disabled]):focus .md-sign,md-slider[discrete]:not([disabled]):focus .md-sign:after{opacity:1;-webkit-transform:translate3d(0,0,0) scale(1);transform:translate3d(0,0,0) scale(1)}md-slider[disabled] .md-sign,md-slider[disabled] .md-track-fill{display:none}md-slider[disabled] .md-thumb{-webkit-transform:scale(0.35);transform:scale(0.35)}md-slider[disabled] .md-disabled-thumb{display:block}.md-sticky-clone{z-index:1;top:0;left:0;right:0;position:absolute!important;-webkit-transform:translate3d(-9999px,-9999px,0);transform:translate3d(-9999px,-9999px,0)}.md-sticky-clone[sticky-state=active]{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.md-sticky-clone[sticky-state=active]:not(.md-sticky-no-effect):after{-webkit-animation:subheaderStickyHoverIn .3s ease-out both;animation:subheaderStickyHoverIn .3s ease-out both}@-webkit-keyframes subheaderStickyHoverIn{0%{box-shadow:0 0 transparent}100%{box-shadow:0 2px 4px 0 rgba(0,0,0,.16)}}@keyframes subheaderStickyHoverIn{0%{box-shadow:0 0 transparent}100%{box-shadow:0 2px 4px 0 rgba(0,0,0,.16)}}@-webkit-keyframes subheaderStickyHoverOut{0%{box-shadow:0 2px 4px 0 rgba(0,0,0,.16)}100%{box-shadow:0 0 transparent}}@keyframes subheaderStickyHoverOut{0%{box-shadow:0 2px 4px 0 rgba(0,0,0,.16)}100%{box-shadow:0 0 transparent}}.md-subheader{display:block;font-size:.9em;font-weight:400;line-height:1em;padding:16px 0 16px 16px;margin:0 16px 0 0;position:relative}.md-subheader:not(.md-sticky-no-effect){transition:.2s ease-out margin}.md-subheader:not(.md-sticky-no-effect):after{position:absolute;left:0;bottom:0;top:0;right:-16px;content:''}.md-subheader:not(.md-sticky-no-effect)[sticky-state=active]{margin-top:-2px}.md-subheader:not(.md-sticky-no-effect):not(.md-sticky-clone)[sticky-prev-state=active]:after{-webkit-animation:subheaderStickyHoverOut .3s ease-out both;animation:subheaderStickyHoverOut .3s ease-out both}md-switch{position:relative;height:24px;margin:8px;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center}md-switch .md-switch-bar{position:absolute;left:16px;top:12px;width:32px;height:1px;pointer-events:none}md-switch .md-switch-thumb{position:absolute;margin:0;left:0;top:0;outline:0}md-switch .md-switch-thumb .md-container{position:absolute;transition:-webkit-transform .2s linear;transition:transform .2s linear;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}md-switch .md-switch-thumb.md-checked .md-container{-webkit-transform:translate3d(48px,0,0);transform:translate3d(48px,0,0)}md-switch .md-switch-thumb .md-label{margin-left:72px}md-tabs{display:block;width:100%;font-weight:500}.md-header{width:100%;height:48px;box-sizing:border-box;position:relative}.md-paginator{z-index:1;margin-right:-2px;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:32px;min-height:100%;cursor:pointer;border:none;background-color:transparent;background-repeat:no-repeat;background-position:center center;position:absolute}.md-paginator.md-prev{left:0}.md-paginator.md-next{right:0}.md-paginator.md-prev{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMjA4IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTUuNCw3LjQgMTQsNiA4LDEyIDE0LDE4IDE1LjQsMTYuNiAxMC44LDEyIAkJIiBzdHlsZT0iZmlsbDp3aGl0ZTsiLz4gPHJlY3QgZmlsbD0ibm9uZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+IDwvZz4gPC9nPiA8ZyBpZD0iR3JpZCIgZGlzcGxheT0ibm9uZSI+IDxnIGRpc3BsYXk9ImlubGluZSI+IDwvZz4gPC9nPiA8L3N2Zz4NCg==)}.md-paginator.md-next{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE3LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPiA8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPiA8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSIyNHB4IiBoZWlnaHQ9IjI0cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPiA8ZyBpZD0iSGVhZGVyIj4gPGc+IDxyZWN0IHg9Ii02MTgiIHk9Ii0xMzM2IiBmaWxsPSJub25lIiB3aWR0aD0iMTQwMCIgaGVpZ2h0PSIzNjAwIi8+IDwvZz4gPC9nPiA8ZyBpZD0iTGFiZWwiPiA8L2c+IDxnIGlkPSJJY29uIj4gPGc+IDxwb2x5Z29uIHBvaW50cz0iMTAsNiA4LjYsNy40IDEzLjIsMTIgOC42LDE2LjYgMTAsMTggMTYsMTIgCQkiIHN0eWxlPSJmaWxsOndoaXRlOyIvPiA8cmVjdCBmaWxsPSJub25lIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiLz4gPC9nPiA8L2c+IDxnIGlkPSJHcmlkIiBkaXNwbGF5PSJub25lIj4gPGcgZGlzcGxheT0iaW5saW5lIj4gPC9nPiA8L2c+IDwvc3ZnPg0K)}md-tabs[center] .md-header:not(.md-paginating) .md-header-items{-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.md-paginating .md-header-items-container{left:32px;right:32px}.md-header-items-container{overflow:hidden;position:absolute;left:0;right:0;height:100%;white-space:nowrap;font-size:16px;font-weight:500;text-transform:uppercase;margin:auto}.md-header-items-container .md-header-items{display:-webkit-flex;display:-ms-flexbox;display:flex;box-sizing:border-box;transition:-webkit-transform .2s linear;transition:transform .2s linear;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);width:100%;height:100%}.md-tabs-content{overflow:hidden;width:100%}.md-tabs-content .md-tab-content{height:100%}md-tabs-ink-bar{position:absolute;left:0;bottom:0;box-sizing:border-box;transition:all .2s linear;height:2px;margin-top:-2px}md-tab{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex:1;-ms-flex:1;flex:1;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box;position:relative;z-index:0;overflow:hidden;height:100%;text-align:center;cursor:pointer;min-width:96px;border:1px dotted transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}md-tab[disabled]{pointer-events:none;cursor:default}md-tab:focus{outline:0}md-tab md-tab-label{-webkit-flex:1;-ms-flex:1;flex:1;z-index:100;opacity:1;overflow:hidden;text-overflow:ellipsis}.md-input-group label,md-input-group label{display:block}.md-input-group input[type=color],.md-input-group input[type=date],.md-input-group input[type=datetime-local],.md-input-group input[type=datetime],.md-input-group input[type=email],.md-input-group input[type=month],.md-input-group input[type=number],.md-input-group input[type=password],.md-input-group input[type=search],.md-input-group input[type=tel],.md-input-group input[type=text],.md-input-group input[type=time],.md-input-group input[type=url],.md-input-group input[type=week],.md-input-group textarea,md-input-group input[type=color],md-input-group input[type=date],md-input-group input[type=datetime-local],md-input-group input[type=datetime],md-input-group input[type=email],md-input-group input[type=month],md-input-group input[type=number],md-input-group input[type=password],md-input-group input[type=search],md-input-group input[type=tel],md-input-group input[type=text],md-input-group input[type=time],md-input-group input[type=url],md-input-group input[type=week],md-input-group textarea{display:block;border-width:0 0 1px;padding-top:2px;line-height:26px;padding-bottom:1px}.md-input-group input[type=color]:focus,.md-input-group input[type=date]:focus,.md-input-group input[type=datetime-local]:focus,.md-input-group input[type=datetime]:focus,.md-input-group input[type=email]:focus,.md-input-group input[type=month]:focus,.md-input-group input[type=number]:focus,.md-input-group input[type=password]:focus,.md-input-group input[type=search]:focus,.md-input-group input[type=tel]:focus,.md-input-group input[type=text]:focus,.md-input-group input[type=time]:focus,.md-input-group input[type=url]:focus,.md-input-group input[type=week]:focus,.md-input-group textarea:focus,md-input-group input[type=color]:focus,md-input-group input[type=date]:focus,md-input-group input[type=datetime-local]:focus,md-input-group input[type=datetime]:focus,md-input-group input[type=email]:focus,md-input-group input[type=month]:focus,md-input-group input[type=number]:focus,md-input-group input[type=password]:focus,md-input-group input[type=search]:focus,md-input-group input[type=tel]:focus,md-input-group input[type=text]:focus,md-input-group input[type=time]:focus,md-input-group input[type=url]:focus,md-input-group input[type=week]:focus,md-input-group textarea:focus{outline:0}.md-input-group input,.md-input-group textarea,md-input-group input,md-input-group textarea{background:0 0}.md-input-group,md-input-group{padding-bottom:2px;margin:10px 0 8px;position:relative;display:block}.md-input-group label,md-input-group label{font-size:1em;z-index:1;pointer-events:none;-webkit-font-smoothing:antialiased}.md-input-group label:hover,md-input-group label:hover{cursor:text}.md-input-group label,md-input-group label{-webkit-transform:translate3d(0,22px,0);transform:translate3d(0,22px,0);-webkit-transform-origin:left center;transform-origin:left center;transition:all ease-out 150ms}.md-input-group input,.md-input-group textarea,md-input-group input,md-input-group textarea{border-bottom-width:1px;transition:all ease-out 150ms}.md-input-group.md-input-focused label,md-input-group.md-input-focused label{-webkit-transform:translate3d(0,4px,0) scale(0.75);transform:translate3d(0,4px,0) scale(0.75)}.md-input-group.md-input-focused input,.md-input-group.md-input-focused textarea,md-input-group.md-input-focused input,md-input-group.md-input-focused textarea{border-bottom-width:2px}.md-input-group.md-input-focused input,md-input-group.md-input-focused input{padding-bottom:0}.md-input-group.md-input-has-value label,.md-input-group.md-input-has-value:not(.md-input-focused) label,md-input-group.md-input-has-value label,md-input-group.md-input-has-value:not(.md-input-focused) label{-webkit-transform:translate3d(0,4px,0) scale(0.75);transform:translate3d(0,4px,0) scale(0.75)}.md-input-group[disabled] input,.md-input-group[disabled] textarea,md-input-group[disabled] input,md-input-group[disabled] textarea{border-bottom-width:0;background-position:0 bottom;background-size:2px 1px;background-repeat:repeat-x;pointer-events:none}.md-input-group[disabled] label,md-input-group[disabled] label{-webkit-transform:translate3d(0,4px,0) scale(0.75);transform:translate3d(0,4px,0) scale(0.75)}.md-input-group[disabled] :not(.md-input-has-value) label,md-input-group[disabled] :not(.md-input-has-value) label{-webkit-transform:translate3d(0,22px,0);transform:translate3d(0,22px,0);-webkit-transform-origin:left center;transform-origin:left center;transition:all ease-out 150ms}md-toast{display:block;position:absolute;box-sizing:border-box;-webkit-align-items:center;-ms-flex-align:center;align-items:center;min-height:48px;padding-left:24px;padding-right:24px;box-shadow:0 2px 5px 0 rgba(0,0,0,.26);border-radius:2px;font-size:14px;cursor:default;max-width:879px;max-height:40px;height:24px;z-index:8;opacity:1;-webkit-transform:translate3d(0,0,0) rotateZ(0deg);transform:translate3d(0,0,0) rotateZ(0deg);transition:.2s linear;transition-property:-webkit-transform,opacity;transition-property:transform,opacity}md-toast.md-capsule{border-radius:24px}md-toast.md-swipedown,md-toast.md-swipeleft,md-toast.md-swiperight,md-toast.md-swipeup{transition:.15s ease-out}md-toast.ng-enter{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);opacity:0}md-toast.ng-enter.md-top{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}md-toast.ng-enter.ng-enter-active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}md-toast.ng-leave.ng-leave-active{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}md-toast.ng-leave.ng-leave-active.md-top{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}md-toast.ng-leave.ng-leave-active.md-swipeleft{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}md-toast.ng-leave.ng-leave-active.md-swiperight{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}md-toast .md-action{line-height:19px;padding-left:24px;cursor:pointer;text-transform:uppercase;float:right}@media (max-width:600px){md-toast{left:0;right:0;width:100%;max-width:100%;min-width:0;border-radius:0;bottom:0}md-toast.md-top{bottom:auto;top:0}}@media (min-width:600px){md-toast{min-width:288px}md-toast.md-bottom{bottom:8px}md-toast.md-left{left:8px}md-toast.md-right{right:8px}md-toast.md-top{top:8px}md-toast.ng-leave.ng-leave-active.md-swipeleft{-webkit-transform:translate3d(-100%,25%,0) rotateZ(-15deg);transform:translate3d(-100%,25%,0) rotateZ(-15deg)}md-toast.ng-leave.ng-leave-active.md-swiperight{-webkit-transform:translate3d(100%,25%,0) rotateZ(15deg);transform:translate3d(100%,25%,0) rotateZ(15deg)}md-toast.ng-leave.ng-leave-active.md-top.md-swipeleft{-webkit-transform:translate3d(-100%,0,0) rotateZ(-15deg);transform:translate3d(-100%,0,0) rotateZ(-15deg)}md-toast.ng-leave.ng-leave-active.md-top.md-swiperight{-webkit-transform:translate3d(100%,0,0) rotateZ(15deg);transform:translate3d(100%,0,0) rotateZ(15deg)}}md-toolbar{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;position:relative;z-index:2;font-size:1.3em;min-height:64px;width:100%}md-toolbar.md-tall{height:192px}md-toolbar.md-medium-tall{height:88px}md-toolbar.md-medium-tall .md-toolbar-tools{height:48px}md-toolbar .md-indent{margin-left:64px}.md-toolbar-tools{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;width:100%;height:64px;font-size:inherit;font-weight:400;padding:0 10px;margin:0}.md-toolbar-tools>*{font-size:inherit;margin:0 8px}.md-toolbar-tools h2,.md-toolbar-tools h3{font-weight:400}.md-toolbar-tools a{color:inherit;text-decoration:none}.md-toolbar-tools .md-button{font-size:16px}@-webkit-keyframes tooltipBackgroundShow{0%{-webkit-transform:scale(0.2);transform:scale(0.2);opacity:.25}50%{opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes tooltipBackgroundShow{0%{-webkit-transform:scale(0.2);transform:scale(0.2);opacity:.25}50%{opacity:1}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes tooltipBackgroundHide{0%{opacity:1}100%{opacity:0}}@keyframes tooltipBackgroundHide{0%{opacity:1}100%{opacity:0}}md-tooltip{position:absolute;font-size:14px;z-index:9;overflow:hidden;pointer-events:none;border-radius:4px}md-tooltip[md-direction=bottom]{-webkit-transform:translate3d(0,-30%,0);transform:translate3d(0,-30%,0);margin-top:8px}md-tooltip[md-direction=top]{-webkit-transform:translate3d(0,30%,0);transform:translate3d(0,30%,0);margin-bottom:8px}md-tooltip .md-background{position:absolute;left:50%;width:256px;height:256px;margin-left:-128px;margin-top:-128px;border-radius:256px;opacity:.25;-webkit-transform:scale(0.2);transform:scale(0.2)}md-tooltip .md-content{max-width:240px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:8px;background:0 0;opacity:.3;transition:inherit}md-tooltip.md-hide,md-tooltip.md-show{transition:.2s ease-out;transition-property:-webkit-transform,opacity;transition-property:transform,opacity}md-tooltip.md-show{pointer-events:auto;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}md-tooltip.md-show .md-background{-webkit-transform:scale(1);transform:scale(1);opacity:1;-webkit-animation:tooltipBackgroundShow linear;animation:tooltipBackgroundShow linear}md-tooltip.md-show .md-content{opacity:.99}md-tooltip.md-hide .md-background{-webkit-transform:scale(1);transform:scale(1);opacity:0;-webkit-animation:tooltipBackgroundHide .2s linear;animation:tooltipBackgroundHide .2s linear}md-tooltip[width-32="1"].md-show .md-background{-webkit-animation-duration:900ms;animation-duration:900ms}md-tooltip[width-32="2"].md-show .md-background{-webkit-animation-duration:800ms;animation-duration:800ms}md-tooltip[width-32="3"].md-show .md-background{-webkit-animation-duration:700ms;animation-duration:700ms}md-tooltip[width-32="4"].md-show .md-background{-webkit-animation-duration:600ms;animation-duration:600ms}md-tooltip[width-32="5"].md-show .md-background{-webkit-animation-duration:500ms;animation-duration:500ms}md-tooltip[width-32="6"].md-show .md-background{-webkit-animation-duration:400ms;animation-duration:400ms}md-tooltip[width-32="7"].md-show .md-background{-webkit-animation-duration:300ms;animation-duration:300ms}md-tooltip[width-32="8"].md-show .md-background{-webkit-animation-duration:200ms;animation-duration:200ms}.md-whiteframe-z1{box-shadow:0 2px 5px 0 rgba(0,0,0,.26)}.md-whiteframe-z2{box-shadow:0 8px 17px rgba(0,0,0,.2)}.md-whiteframe-z3{box-shadow:0 17px 50px rgba(0,0,0,.19)}.md-whiteframe-z4{box-shadow:0 16px 28px 0 rgba(0,0,0,.22)}.md-whiteframe-z5{box-shadow:0 27px 24px 0 rgba(0,0,0,.2)}md-backdrop.md-opaque.md-default-theme{background-color:rgba(0,0,0,.3);position:absolute}md-bottom-sheet.md-default-theme{background-color:#fafafa;border-top-color:#bdbdbd}md-bottom-sheet.md-default-theme.md-list md-item{color:rgba(0,0,0,.54)}md-bottom-sheet.md-default-theme .md-subheader{background-color:#fafafa;color:rgba(0,0,0,.54)}.md-button.md-default-theme{border-radius:3px}.md-button.md-default-theme:not([disabled]):focus,.md-button.md-default-theme:not([disabled]):hover{background-color:rgba(158,158,158,.2)}.md-button.md-default-theme.md-fab{border-radius:50%}.md-button.md-default-theme.md-primary{color:#29b6f6;fill:#29b6f6}.md-button.md-default-theme.md-warn{color:#e84e40;fill:#e84e40}.md-button.md-default-theme.md-fab,.md-button.md-default-theme.md-raised{background-color:rgba(158,158,158,.185)}.md-button.md-default-theme.md-fab:not([disabled]):focus,.md-button.md-default-theme.md-fab:not([disabled]):hover,.md-button.md-default-theme.md-raised:not([disabled]):focus,.md-button.md-default-theme.md-raised:not([disabled]):hover{background-color:rgba(158,158,158,.3)}.md-button.md-default-theme.md-fab.md-primary,.md-button.md-default-theme.md-raised.md-primary{color:#fff;background-color:#03a9f4}.md-button.md-default-theme.md-fab.md-primary:not([disabled]):focus,.md-button.md-default-theme.md-fab.md-primary:not([disabled]):hover,.md-button.md-default-theme.md-raised.md-primary:not([disabled]):focus,.md-button.md-default-theme.md-raised.md-primary:not([disabled]):hover{background-color:#039be5}.md-button.md-default-theme.md-fab.md-warn,.md-button.md-default-theme.md-raised.md-warn{color:#fff;background-color:#e51c23}.md-button.md-default-theme.md-fab.md-warn:not([disabled]):focus,.md-button.md-default-theme.md-fab.md-warn:not([disabled]):hover,.md-button.md-default-theme.md-raised.md-warn:not([disabled]):focus,.md-button.md-default-theme.md-raised.md-warn:not([disabled]):hover{background-color:#d01716}.md-button.md-default-theme.md-fab[disabled],.md-button.md-default-theme.md-raised[disabled],.md-button.md-default-theme[disabled]{color:rgba(0,0,0,.26);fill:rgba(0,0,0,.26);background-color:transparent;cursor:not-allowed}md-card.md-default-theme{border-radius:2px}md-card.md-default-theme .md-card-image{border-radius:2px 2px 0 0}md-checkbox.md-default-theme .md-ripple{color:#0a8f08}md-checkbox.md-default-theme.md-checked .md-ripple{color:#757575}md-checkbox.md-default-theme .md-icon{border-color:rgba(0,0,0,.54)}md-checkbox.md-default-theme.md-checked .md-icon{background-color:rgba(43,175,43,.87)}md-checkbox.md-default-theme.md-checked .md-icon:after{border-color:#eee}md-checkbox.md-default-theme[disabled] .md-icon{border-color:rgba(0,0,0,.26)}md-checkbox.md-default-theme[disabled].md-checked .md-icon{background-color:rgba(0,0,0,.26)}md-content.md-default-theme{background-color:#fff}md-dialog.md-default-theme{border-radius:4px;background-color:#fff}md-dialog.md-default-theme.md-content-overflow .md-actions,md-divider.md-default-theme{border-top-color:rgba(0,0,0,.12)}md-progress-circular.md-default-theme{background-color:transparent}md-progress-circular.md-default-theme .md-circle .md-mask .md-fill{background-color:#03a9f4}md-progress-circular.md-default-theme .md-inset{background-color:#fff}md-progress-linear.md-default-theme .md-container{background-color:#b3e5fc}md-progress-linear.md-default-theme .md-bar{background-color:#03a9f4}md-progress-linear.md-default-theme[mode=buffer] .md-dashed:before{background:radial-gradient(#b3e5fc 0,#b3e5fc 16%,transparent 42%)}md-progress-linear.md-default-theme[mode=buffer] .md-bar1{background-color:#b3e5fc}md-radio-button.md-default-theme .md-container .md-ripple,md-switch.md-default-theme .md-switch-thumb .md-container .md-ripple{color:#0a8f08}md-radio-button.md-default-theme .md-off,md-switch.md-default-theme .md-switch-thumb .md-off{border-color:rgba(0,0,0,.54)}md-radio-button.md-default-theme .md-on,md-switch.md-default-theme .md-switch-thumb .md-on{background-color:rgba(43,175,43,.87)}md-radio-button.md-default-theme.md-checked .md-off,md-switch.md-default-theme .md-switch-thumb.md-checked .md-off{border-color:rgba(43,175,43,.87)}md-radio-button.md-default-theme.md-checked .md-ink-ripple,md-switch.md-default-theme .md-switch-thumb.md-checked .md-ink-ripple{color:rgba(43,175,43,.87)}md-radio-group.md-default-theme:focus{border-color:rgba(0,0,0,.73)}md-slider.md-default-theme .md-track{background-color:#c8c8c8}md-slider.md-default-theme .md-track-fill{background-color:#03a9f4}md-slider.md-default-theme .md-thumb:after{border-color:#03a9f4;background-color:#03a9f4}md-slider.md-default-theme .md-sign{background-color:#03a9f4}md-slider.md-default-theme .md-sign:after{border-top-color:#03a9f4}md-slider.md-default-theme .md-thumb-text{color:#fff}md-slider.md-default-theme .md-focus-thumb{background-color:rgba(0,0,0,.54)}md-slider.md-default-theme .md-focus-ring{border-color:rgba(0,0,0,.12)}md-slider.md-default-theme .md-disabled-thumb{border-color:#fff}md-slider.md-default-theme.md-min .md-thumb:after{background-color:#fff}md-slider.md-default-theme[disabled] .md-thumb:after{border-color:#bdbdbd}md-slider.md-default-theme[disabled]:not(.md-min) .md-thumb:after{background-color:#bdbdbd}.md-subheader.md-default-theme{color:rgba(0,0,0,.54);background-color:#fff}.md-subheader.md-default-theme.md-primary{color:#03a9f4}md-switch.md-default-theme .md-switch-bar{background-color:rgba(0,0,0,.54)}md-switch.md-default-theme .md-switch-thumb:focus .md-label{border:1px dotted #000}md-tabs.md-default-theme .md-header{background-color:#03a9f4}md-tabs.md-default-theme md-tabs-ink-bar{background:#ffff85}md-tabs.md-default-theme md-tab{color:#b3e5fc}md-tabs.md-default-theme md-tab.active{color:#fff}md-tabs.md-default-theme md-tab[disabled]{color:rgba(0,0,0,.12)}md-tabs.md-default-theme md-tab:focus{border-color:rgba(0,0,0,.73)}md-tabs.md-default-theme md-tab .md-ripple-container{color:#ffff85}md-input-group.md-default-theme input,md-input-group.md-default-theme textarea{text-shadow:none}md-input-group.md-default-theme input:-ms-input-placeholder,md-input-group.md-default-theme textarea:-ms-input-placeholder{color:rgba(0,0,0,.26)}md-input-group.md-default-theme input::-webkit-input-placeholder,md-input-group.md-default-theme textarea::-webkit-input-placeholder{color:rgba(0,0,0,.26)}md-input-group.md-default-theme label{text-shadow:none;color:rgba(0,0,0,.26)}md-input-group.md-default-theme input,md-input-group.md-default-theme textarea{color:rgba(0,0,0,.73);border-color:rgba(0,0,0,.12)}md-input-group.md-default-theme.md-input-focused input,md-input-group.md-default-theme.md-input-focused textarea{border-color:#03a9f4}md-input-group.md-default-theme.md-input-focused label{color:#03a9f4}md-input-group.md-default-theme.md-input-has-value:not(.md-input-focused) label{color:rgba(0,0,0,.372)}md-input-group.md-default-theme[disabled] input,md-input-group.md-default-theme[disabled] textarea{border-bottom-color:rgba(0,0,0,.12);color:rgba(0,0,0,.26);background-image:linear-gradient(to right,rgba(0,0,0,.19) 0,rgba(0,0,0,.19) 50%,rgba(0,0,0,0) 0)}md-toast.md-default-theme{background-color:#323232;color:#fff}md-toast.md-default-theme .md-button{color:#fff}md-toast.md-default-theme .md-action{color:#40c4ff}md-toolbar.md-default-theme{background-color:#03a9f4;color:#fff}md-tooltip.md-default-theme{color:#fff}md-tooltip.md-default-theme .md-background{background-color:rgba(0,0,0,.52)}
!function(){angular.module("ngMaterial",["ng","ngAnimate","ngAria","material.core","material.animations","material.components.backdrop","material.components.bottomSheet","material.components.button","material.components.card","material.components.checkbox","material.components.content","material.components.dialog","material.components.divider","material.components.icon","material.components.list","material.components.progressCircular","material.components.progressLinear","material.components.radioButton","material.components.sidenav","material.components.slider","material.components.sticky","material.components.subheader","material.components.swipe","material.components.switch","material.components.tabs","material.components.textField","material.components.toast","material.components.toolbar","material.components.tooltip","material.components.whiteframe","material.services.aria","material.services.attrBind","material.services.compiler","material.services.interimElement","material.services.media","material.services.registry","material.services.theming"])}(),function(){angular.module("material.core",[]).run(function(){if("undefined"==typeof Hammer)throw new Error("ngMaterial requires HammerJS to be preloaded.")}).config(["$provide",function(e){function t(e){return e.debounce=function(t){var n,i,r,a;return function(){n=arguments,a=this,r=t,i||(i=!0,e(function(){r.apply(a,n),i=!1}))}},e}e.decorator("$$rAF",["$delegate","$rootScope",t])}])}(),function(){angular.module("material.core").constant("$mdConstant",{KEY_CODE:{ENTER:13,ESCAPE:27,SPACE:32,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40}})}(),function(){var e=["0","0","0"];angular.module("material.core").factory("$mdUtil",["$cacheFactory",function(t){function n(e,t){function n(){return[].concat($)}function i(){return $.length}function r(e){return $.length&&e>-1&&e<$.length}function a(e){return e?r(d(e)+1):!1}function o(e){return e?r(d(e)-1):!1}function c(e){return r(e)?$[e]:null}function l(e,t){return $.filter(function(n){return n[e]===t})}function s(e,t){return e?(angular.isNumber(t)||(t=$.length),$.splice(t,0,e),d(e)):-1}function u(e){m(e)&&$.splice(d(e),1)}function d(e){return $.indexOf(e)}function m(e){return e&&d(e)>-1}function f(e,n){if(n=n||g,m(e)){var i=d(e)+1,a=r(i)?$[i]:t?v():null;return n(a)?a:f(a,n)}return null}function p(e,n){if(n=n||g,m(e)){var i=d(e)-1,a=r(i)?$[i]:t?h():null;return n(a)?a:p(a,n)}return null}function v(){return $.length?$[0]:null}function h(){return $.length?$[$.length-1]:null}var g=function(){return!0};t=!!t;var $=e||[];return{items:n,count:i,inRange:r,contains:m,indexOf:d,itemAt:c,findBy:l,add:s,remove:u,first:v,last:h,next:f,previous:p,hasPrevious:o,hasNext:a}}function i(e,n){var i=t(e,n),r={};return i._put=i.put,i.put=function(e,t){return r[e]=!0,i._put(e,t)},i._remove=i.remove,i.remove=function(e){return delete r[e],i._remove(e)},i.keys=function(){return Object.keys(r)},i}var r,a=/([\:\-\_]+(.))/g;return r={now:window.performance?angular.bind(window.performance,window.performance.now):Date.now,ancestorHasAttribute:function(e,t,n){n=n||4;for(var i=e;n--&&i.length;){if(i[0].hasAttribute&&i[0].hasAttribute(t))return!0;i=i.parent()}return!1},isParentDisabled:function(e,t){return r.ancestorHasAttribute(e,"disabled",t)},elementIsSibling:function(e,t){return e.parent().length&&e.parent()[0]===t.parent()[0]},camelCase:function(e){return e.replace(a,function(e,t,n,i){return i?n.toUpperCase():n})},stringFromTextBody:function(e,t){var n=e.trim();return n.split(/\s+/).length>t&&(n=e.split(/\s+/).slice(1,t+1).join(" ")+"..."),n},iterator:n,cacheFactory:i,debounce:function(e,t,n){var i;return function(){var r=this,a=arguments;clearTimeout(i),i=setTimeout(function(){i=null,n||e.apply(r,a)},t),n&&!i&&e.apply(r,a)}},throttle:function(e,t){var n;return function(){var i=this,a=arguments,o=r.now();(!n||n-o>t)&&(e.apply(i,a),n=o)}},wrap:function(e,t,n){e.hasOwnProperty(0)&&(e=e[0]);var i=document.createElement(t);return i.className+=n,i.appendChild(e.parentNode.replaceChild(i,e)),angular.element(i)},nextUid:function(){for(var t,n=e.length;n;){if(n--,t=e[n].charCodeAt(0),57==t)return e[n]="A",e.join("");if(90!=t)return e[n]=String.fromCharCode(t+1),e.join("");e[n]="0"}return e.unshift("0"),e.join("")},disconnectScope:function(e){if(e&&e.$root!==e&&!e.$$destroyed){var t=e.$parent;e.$$disconnected=!0,t.$$childHead===e&&(t.$$childHead=e.$$nextSibling),t.$$childTail===e&&(t.$$childTail=e.$$prevSibling),e.$$prevSibling&&(e.$$prevSibling.$$nextSibling=e.$$nextSibling),e.$$nextSibling&&(e.$$nextSibling.$$prevSibling=e.$$prevSibling),e.$$nextSibling=e.$$prevSibling=null}},reconnectScope:function(e){if(e&&e.$root!==e&&e.$$disconnected){var t=e,n=t.$parent;t.$$disconnected=!1,t.$$prevSibling=n.$$childTail,n.$$childHead?(n.$$childTail.$$nextSibling=t,n.$$childTail=t):n.$$childHead=n.$$childTail=t}}}}]),angular.element.prototype.focus=angular.element.prototype.focus||function(){return this.length&&this[0].focus(),this},angular.element.prototype.blur=angular.element.prototype.blur||function(){return this.length&&this[0].blur(),this}}(),function(){function e(e,t,n,i){function r(e){return l?"webkit"+e.charAt(0).toUpperCase()+e.substring(1):e}function a(e,n,r){function a(t){t.target===e[0]&&(e.off(c.TRANSITIONEND_EVENT,a),l.resolve())}var l=i.defer();n.append(e);var s;if(r){var u=r[0].getBoundingClientRect();s=o(u.left-e[0].offsetWidth,u.top-e[0].offsetHeight,0)+" scale(0.2)"}else s="translate3d(0,100%,0) scale(0.5)";return e.css(c.TRANSFORM,s).css("opacity",0),t(function(){t(function(){e.addClass("md-active").css(c.TRANSFORM,"").css("opacity","").on(c.TRANSITIONEND_EVENT,a)})}),l.promise}function o(e,t,n){return"translate3d("+Math.floor(e)+"px,"+Math.floor(t)+"px,"+Math.floor(n)+"px)"}var c,l=/webkit/i.test(n.vendorPrefix);return c={popIn:a,TRANSITIONEND_EVENT:"transitionend"+(l?" webkitTransitionEnd":""),ANIMATIONEND_EVENT:"animationend"+(l?" webkitAnimationEnd":""),TRANSFORM:r("transform"),TRANSITION:r("transition"),TRANSITION_DURATION:r("transitionDuration"),ANIMATION_PLAY_STATE:r("animationPlayState"),ANIMATION_DURATION:r("animationDuration"),ANIMATION_NAME:r("animationName"),ANIMATION_TIMING:r("animationTimingFunction"),ANIMATION_DIRECTION:r("animationDirection")}}angular.module("material.animations",["material.core"]).service("$mdEffects",["$rootElement","$$rAF","$sniffer","$q",e])}(),function(){function e(e){return function(t,n,i){"checkbox"==i.inkRipple?e.attachCheckboxBehavior(n):e.attachButtonBehavior(n)}}function t(e,t,n,i){function r(e){return o(e,{mousedown:!0,center:!1,animationDuration:350,mousedownPauseTime:175,animationName:"inkRippleButton",animationTimingFunction:"linear"})}function a(e){return o(e,{mousedown:!0,center:!0,animationDuration:300,mousedownPauseTime:180,animationName:"inkRippleCheckbox",animationTimingFunction:"linear"})}function o(t,r){function a(){return!t[0].hasAttribute("disabled")}function o(i,a,o){var c=angular.element('<div class="md-ripple">').css(n.ANIMATION_DURATION,r.animationDuration+"ms").css(n.ANIMATION_NAME,r.animationName).css(n.ANIMATION_TIMING,r.animationTimingFunction).on(n.ANIMATIONEND_EVENT,function(){c.remove()});s||(s=angular.element('<div class="md-ripple-container">'),t.append(s)),s.append(c);var d=s.prop("offsetWidth");if(r.center)i=d/2,a=s.prop("offsetHeight")/2;else if(o){var m=u.getBoundingClientRect();i-=m.left,a-=m.top}l&&(a+=l.$element.prop("scrollTop"));var f={"background-color":e.getComputedStyle(c[0]).color||e.getComputedStyle(u).color,"border-radius":d/2+"px",left:i-d/2+"px",width:d+"px",top:a-d/2+"px",height:d+"px"};return f[n.ANIMATION_DURATION]=r.fadeoutDuration+"ms",c.css(f),c}function c(e){e.eventType===Hammer.INPUT_START&&e.isFirst&&a()?(f=o(e.center.x,e.center.y,!0),m=i(function(){f&&f.css(n.ANIMATION_PLAY_STATE,"paused")},r.mousedownPauseTime,!1),f.on("$destroy",function(){f=null})):e.eventType===Hammer.INPUT_END&&e.isFinal&&(i.cancel(m),f&&f.css(n.ANIMATION_PLAY_STATE,""))}if(t.controller("noink"))return angular.noop;var l=t.controller("mdContent");r=angular.extend({mousedown:!0,hover:!0,focus:!0,center:!1,animationDuration:300,mousedownPauseTime:150,animationName:"",animationTimingFunction:"linear"},r||{});var s,u=t[0],d=new Hammer(u);return r.mousedown&&d.on("hammer.input",c),function(){d.destroy(),s&&s.remove()};var m,f}return{attachButtonBehavior:r,attachCheckboxBehavior:a,attach:o}}angular.module("material.animations").directive("inkRipple",["$mdInkRipple",e]).factory("$mdInkRipple",["$window","$$rAF","$mdEffects","$timeout","$mdUtil",t])}(),function(){function e(){return function(){return{controller:angular.noop}}}angular.module("material.animations").directive({noink:e(),nobar:e(),nostretch:e()})}(),function(){function e(e){return e}angular.module("material.components.backdrop",["material.services.theming"]).directive("mdBackdrop",["$mdTheming",e])}(),function(){function e(){return{restrict:"E"}}function t(e,t,n,i,r,a,o){function c(e,n,r){u=a('<md-backdrop class="md-opaque ng-enter">')(e),u.on("click touchstart",function(){i(d.cancel)}),o.inherit(u,r.parent),t.enter(u,r.parent,null);var c=new s(n);return r.bottomSheet=c,r.targetEvent&&angular.element(r.targetEvent.target).blur(),o.inherit(c.element,r.parent),t.enter(c.element,r.parent)}function l(e,n,i){var r=i.bottomSheet;return t.leave(u),t.leave(r.element).then(function(){r.cleanup(),i.targetEvent&&angular.element(i.targetEvent.target).focus()})}function s(e){function t(t){t.preventDefault(),p=t.target,s=o(t),f=e.css(n.TRANSITION_DURATION),e.css(n.TRANSITION_DURATION,"0s")}function r(t){e.css(n.TRANSITION_DURATION,f);var r=o(t);Math.abs(r-s)<5&&t.target==p?angular.element(t.target).triggerHandler("click"):m>g?i(d.cancel):c(void 0)}function a(e){var t=o(e),n=t-s;m=t-u,u=t,n=l(n),c(n+v)}function o(e){var t=e.touches&&e.touches.length?e.touches[0]:e.changedTouches[0];return t.clientY}function c(t){null===t||void 0===t?e.css(n.TRANSFORM,""):e.css(n.TRANSFORM,"translate3d(0, "+t+"px, 0)")}function l(e){if(0>e&&-v+h>e){e=-e;var t=v-h;e=Math.max(-v,-Math.min(v-5,t+h*(e-t)/v)-e/50)}return e}var s,u,m,f,p,v=80,h=20,g=10;return e=e.eq(0),e.on("touchstart",t),e.on("touchmove",a),e.on("touchend",r),{element:e,cleanup:function(){e.off("touchstart",t),e.off("touchmove",a),e.off("touchend",r)}}}var u,d;return d=e({themable:!0,targetEvent:null,onShow:c,onRemove:l})}angular.module("material.components.bottomSheet",["material.components.backdrop","material.services.interimElement","material.services.theming"]).directive("mdBottomSheet",[e]).factory("$mdBottomSheet",["$$interimElement","$animate","$mdEffects","$timeout","$$rAF","$compile","$mdTheming",t])}(),function(){function e(e,t,n){function i(e){return angular.isDefined(e.href)||angular.isDefined(e.ngHref)}function r(e,t){var n=i(t)?"a":"button",r=e[0].hasAttribute("disabled")?" disabled ":" ";return"<"+n+r+'class="md-button" ng-transclude></'+n+">"}function a(r,a,o){var c=a[0];t(a),e.attachButtonBehavior(a);var l=c.textContent.trim();l||n.expect(a,"aria-label"),i(o)&&r.$watch(function(){return c.hasAttribute("disabled")},function(e){a.attr("tabindex",e?-1:0)})}return{restrict:"E",replace:!0,transclude:!0,template:r,link:a}}angular.module("material.components.button",["material.core","material.animations","material.services.aria","material.services.theming"]).directive("mdButton",["$mdInkRipple","$mdTheming","$mdAria",e])}(),function(){function e(){return{restrict:"E",link:function(){}}}angular.module("material.components.card",[]).directive("mdCard",[e])}(),function(){function e(e,t,n,i,r){function a(e,t){return t.type="checkbox",t.tabIndex=0,e.attr("role",t.type),function(t,a,l,s){function u(e){e.which===i.KEY_CODE.SPACE&&(e.preventDefault(),d(e))}function d(e){a[0].hasAttribute("disabled")||t.$apply(function(){f=!f,s.$setViewValue(f,e&&e.type),s.$render()})}function m(){f=s.$viewValue,f?a.addClass(c):a.removeClass(c)}var f=!1;r(a),s=s||{$setViewValue:function(e){this.$viewValue=e},$parsers:[],$formatters:[]},n.expectWithText(e,"aria-label"),o.link.pre(t,{on:angular.noop,0:{}},l,[s]),a.on("click",d),a.on("keypress",u),s.$render=m}}var o=e[0],c="md-checked";return{restrict:"E",transclude:!0,require:"?ngModel",template:'<div class="md-container" ink-ripple="checkbox"><div class="md-icon"></div></div><div ng-transclude class="md-label"></div>',compile:a}}angular.module("material.components.checkbox",["material.core","material.animations","material.services.theming","material.services.aria"]).directive("mdCheckbox",["inputDirective","$mdInkRipple","$mdAria","$mdConstant","$mdTheming",e])}(),function(){function e(e){function t(e,t){this.$scope=e,this.$element=t}return{restrict:"E",controller:["$scope","$element",t],link:function(t,n){e(n),t.$broadcast("$mdContentLoaded",n)}}}angular.module("material.components.content",["material.services.theming","material.services.registry"]).directive("mdContent",["$mdTheming",e])}(),function(){function e(e,t){return{restrict:"E",link:function(n,i){t(i),e(function(){var e=i[0].querySelector("md-content");e&&e.scrollHeight>e.clientHeight&&i.addClass("md-content-overflow")})}}}function t(e,t,n,i,r,a,o,c,l,s){function u(a,o,c){function u(){var e=o[0].querySelector(".dialog-close");if(!e){var t=o[0].querySelectorAll(".md-actions button");e=t[t.length-1]}return angular.element(e)}c.parent=angular.element(c.parent),c.popInTarget=angular.element((c.targetEvent||{}).target);var d=u();return m(o.find("md-dialog")),c.hasBackdrop&&(c.backdrop=n('<md-backdrop class="md-opaque ng-enter">')(a),s.inherit(c.backdrop,c.parent),r.enter(c.backdrop,c.parent,null)),i.popIn(o,c.parent,c.popInTarget.length&&c.popInTarget).then(function(){c.escapeToClose&&(c.rootElementKeyupCallback=function(t){t.keyCode===l.KEY_CODE.ESCAPE&&e(f.cancel)},t.on("keyup",c.rootElementKeyupCallback)),c.clickOutsideToClose&&(c.dialogClickOutsideCallback=function(t){t.target===o[0]&&e(f.cancel)},o.on("click",c.dialogClickOutsideCallback)),d.focus()})}function d(e,n,i){return i.backdrop&&(r.leave(i.backdrop),n.data("backdrop",void 0)),i.escapeToClose&&t.off("keyup",i.rootElementKeyupCallback),i.clickOutsideToClose&&n.off("click",i.dialogClickOutsideCallback),r.leave(n).then(function(){n.remove(),i.popInTarget&&i.popInTarget.focus()})}function m(e){e.attr({role:"dialog"});var t=e.find("md-content");0===t.length&&(t=e),a.expectAsync(e,"aria-label",function(){return c.stringFromTextBody(t.text(),3)})}var f;return f=o({hasBackdrop:!0,isolateScope:!0,onShow:u,onRemove:d,clickOutsideToClose:!0,escapeToClose:!0,targetEvent:null,transformTemplate:function(e){return'<div class="md-dialog-container">'+e+"</div>"}})}angular.module("material.components.dialog",["material.core","material.animations","material.components.backdrop","material.services.compiler","material.services.aria","material.services.interimElement","material.services.theming"]).directive("mdDialog",["$$rAF","$mdTheming",e]).factory("$mdDialog",["$timeout","$rootElement","$compile","$mdEffects","$animate","$mdAria","$$interimElement","$mdUtil","$mdConstant","$mdTheming",t])}(),function(){function e(){}function t(t){return{restrict:"E",link:t,controller:[e]}}angular.module("material.components.divider",["material.animations","material.services.aria","material.services.theming"]).directive("mdDivider",["$mdTheming",t])}(),function(){function e(){return{restrict:"E",template:'<object class="md-icon"></object>',compile:function(e,t){var n=angular.element(e[0].children[0]);angular.isDefined(t.icon)&&n.attr("data",t.icon)}}}angular.module("material.components.icon",[]).directive("mdIcon",[e])}(),function(){function e(){return{restrict:"E",link:function(e,t){t.attr({role:"list"})}}}function t(){return{restrict:"E",link:function(e,t){t.attr({role:"listitem"})}}}angular.module("material.components.list",[]).directive("mdList",[e]).directive("mdItem",[t])}(),function(){function e(e,t,n){function i(e){return e.attr("aria-valuemin",0),e.attr("aria-valuemax",100),e.attr("role","progressbar"),r}function r(e,i,r){n(i);var l,s,u,d,m=i[0],f=m.querySelectorAll(".md-fill, .md-mask.md-full"),p=m.querySelectorAll(".md-fill.md-fix"),v=r.diameter||48,h=v/48;m.style[t.TRANSFORM]="scale("+h.toString()+")",r.$observe("value",function(e){for(s=a(e),u=o[s],d=c[s],i.attr("aria-valuenow",s),l=0;l<f.length;l++)f[l].style[t.TRANSFORM]=u;for(l=0;l<p.length;l++)p[l].style[t.TRANSFORM]=d})}function a(e){return e>100?100:0>e?0:Math.ceil(e||0)}for(var o=new Array(101),c=new Array(101),l=0;101>l;l++){var s=l/100,u=Math.floor(180*s);o[l]="rotate("+u.toString()+"deg)",c[l]="rotate("+(2*u).toString()+"deg)"}return{restrict:"E",template:'<div class="md-wrapper1"><div class="md-wrapper2"><div class="md-circle"><div class="md-mask md-full"><div class="md-fill"></div></div><div class="md-mask md-half"><div class="md-fill"></div><div class="md-fill md-fix"></div></div><div class="md-shadow"></div></div><div class="md-inset"></div></div></div>',compile:i}}angular.module("material.components.progressCircular",["material.animations","material.services.aria","material.services.theming"]).directive("mdProgressCircular",["$$rAF","$mdEffects","$mdTheming",e])}(),function(){function e(e,n,i){function r(e){return e.attr("aria-valuemin",0),e.attr("aria-valuemax",100),e.attr("role","progressbar"),a}function a(r,a,c){i(a);var l=a[0].querySelector(".md-bar1").style,s=a[0].querySelector(".md-bar2").style,u=angular.element(a[0].querySelector(".md-container"));c.$observe("value",function(e){if("query"!=c.mode){var i=o(e);a.attr("aria-valuenow",i),s[n.TRANSFORM]=t[i]}}),c.$observe("secondaryvalue",function(e){l[n.TRANSFORM]=t[o(e)]}),e(function(){u.addClass("md-ready")})}function o(e){return e>100?100:0>e?0:Math.ceil(e||0)}return{restrict:"E",template:'<div class="md-container"><div class="md-dashed"></div><div class="md-bar md-bar1"></div><div class="md-bar md-bar2"></div></div>',compile:r}}angular.module("material.components.progressLinear",["material.animations","material.services.theming","material.services.aria"]).directive("mdProgressLinear",["$$rAF","$mdEffects","$mdTheming",e]);var t=function(){function e(e){var t=e/100,n=(e-100)/2;return"translateX("+n.toString()+"%) scale("+t.toString()+", 1)"}for(var t=new Array(101),n=0;101>n;n++)t[n]=e(n);return t}()}(),function(){function e(e,t,n){function i(e,i,r,a){function o(e){e.keyCode===t.KEY_CODE.LEFT_ARROW||e.keyCode===t.KEY_CODE.UP_ARROW?(e.preventDefault(),c.selectPrevious()):(e.keyCode===t.KEY_CODE.RIGHT_ARROW||e.keyCode===t.KEY_CODE.DOWN_ARROW)&&(e.preventDefault(),c.selectNext())}n(i);var c=a[0],l=a[1]||{$setViewValue:angular.noop};c.init(l),i.attr({role:"radiogroup",tabIndex:"0"}).on("keydown",o)}function r(e){this._radioButtonRenderFns=[],this.$element=e}function a(){return{init:function(e){this._ngModelCtrl=e,this._ngModelCtrl.$render=angular.bind(this,this.render)},add:function(e){this._radioButtonRenderFns.push(e)},remove:function(e){var t=this._radioButtonRenderFns.indexOf(e);-1!==t&&this._radioButtonRenderFns.splice(t,1)},render:function(){this._radioButtonRenderFns.forEach(function(e){e()})},setViewValue:function(e,t){this._ngModelCtrl.$setViewValue(e,t),this.render()},getViewValue:function(){return this._ngModelCtrl.$viewValue},selectNext:function(){return o(this.$element,1)},selectPrevious:function(){return o(this.$element,-1)},setActiveDescendant:function(e){this.$element.attr("aria-activedescendant",e)}}}function o(t,n){var i=e.iterator(Array.prototype.slice.call(t[0].querySelectorAll("md-radio-button")),!0);if(i.count()){var r=t[0].querySelector("md-radio-button.md-checked"),a=i[0>n?"previous":"next"](r)||i.first();angular.element(a).triggerHandler("click")}}return r.prototype=a(),{restrict:"E",controller:["$element",r],require:["mdRadioGroup","?ngModel"],link:i}}function t(e,t,n){function i(i,a,o,c){function l(e){a[0].hasAttribute("disabled")||i.$apply(function(){c.setViewValue(o.value,e&&e.type)})}function s(){var e=c.getViewValue()===o.value;e!==d&&(d=e,a.attr("aria-checked",e),e?(a.addClass(r),c.setActiveDescendant(a.attr("id"))):a.removeClass(r))}function u(n,i){function r(){return o.id||"radio_"+t.nextUid()}i.ariaId=r(),n.attr({id:i.ariaId,role:"radio","aria-checked":"false"}),e.expectWithText(n,"aria-label")}var d;n(a),u(a,i),c.add(s),o.$observe("value",s),a.on("click",l).on("$destroy",function(){c.remove(s)})}var r="md-checked";return{restrict:"E",require:"^mdRadioGroup",transclude:!0,template:'<div class="md-container" ink-ripple="checkbox"><div class="md-off"></div><div class="md-on"></div></div><div ng-transclude class="md-label"></div>',link:i}}angular.module("material.components.radioButton",["material.core","material.animations","material.services.aria","material.services.theming"]).directive("mdRadioGroup",["$mdUtil","$mdConstant","$mdTheming",e]).directive("mdRadioButton",["$mdAria","$mdUtil","$mdTheming",t])}(),function(){function e(e,t,n,i,r,a){this.destroy=a.register(this,n.componentId),this.isOpen=function(){return!!e.isOpen},this.toggle=function(){e.isOpen=!e.isOpen},this.open=function(){e.isOpen=!0},this.close=function(){e.isOpen=!1}}function t(e){return function(t){var n=e.get(t);return n||e.notFoundError(t),{isOpen:function(){return n&&n.isOpen()},toggle:function(){n&&n.toggle()},open:function(){n&&n.open()},close:function(){n&&n.close()}}}}function n(e,t,n,i,r,a,o){function c(c,l,s,u){function d(e){var n=l.parent();n[e?"on":"off"]("keydown",m),t[e?"enter":"leave"](v,n),v[e?"on":"off"]("click",f),t[e?"removeClass":"addClass"](l,"md-closed").then(function(){c.isOpen&&l.focus()})}function m(e){e.keyCode===r.KEY_CODE.ESCAPE&&(f(),e.preventDefault(),e.stopPropagation())}function f(){e(function(){u.close()})}var p=n(s.isLockedOpen),v=a('<md-backdrop class="md-sidenav-backdrop md-opaque">')(c);o.inherit(v,l),l.on("$destroy",u.destroy),c.$watch("isOpen",d),c.$watch(function(){return p(c.$parent,{$media:i})},function(e){l.toggleClass("md-locked-open",!!e),v.toggleClass("md-locked-open",!!e)})}return{restrict:"E",scope:{isOpen:"=?"},controller:"$mdSidenavController",compile:function(e){return e.addClass("md-closed"),e.attr("tabIndex","-1"),c}}}angular.module("material.components.sidenav",["material.core","material.services.registry","material.services.media","material.components.backdrop","material.services.theming","material.animations"]).factory("$mdSidenav",["$mdComponentRegistry",t]).directive("mdSidenav",["$timeout","$animate","$parse","$mdMedia","$mdConstant","$compile","$mdTheming",n]).controller("$mdSidenavController",["$scope","$element","$attrs","$timeout","$mdSidenav","$mdComponentRegistry",e])}(),function(){function e(e){function n(t,n,i,r){e(n);var a=r[0]||{$setViewValue:function(e){this.$viewValue=e,this.$viewChangeListeners.forEach(function(e){e()})},$parsers:[],$formatters:[],$viewChangeListeners:[]},o=r[1];o.init(a)}return{scope:{},require:["?ngModel","mdSlider"],controller:["$scope","$element","$attrs","$$rAF","$window","$mdEffects","$mdAria","$mdUtil","$mdConstant",t],template:'<div class="md-track-container"><div class="md-track"></div><div class="md-track md-track-fill"></div><div class="md-track-ticks"></div></div><div class="md-thumb-container"><div class="md-thumb"></div><div class="md-focus-thumb"></div><div class="md-focus-ring"></div><div class="md-sign"><span class="md-thumb-text" ng-bind="modelValue"></span></div><div class="md-disabled-thumb"></div></div>',link:n}}function t(e,t,n,i,r,a,o,c,l){this.init=function(s){function u(){h(),T(),v()}function d(e){U=parseFloat(e),t.attr("aria-valuemin",e)}function m(e){L=parseFloat(e),t.attr("aria-valuemax",e)}function f(e){W=parseFloat(e),v()}function p(e){t.attr("aria-disabled",!!e)}function v(){if(angular.isDefined(n.discrete)){var e=Math.floor((L-U)/W);Y||(Y=angular.element('<canvas style="position:absolute;">'),K=Y[0].getContext("2d"),K.fillStyle="black",P.append(Y));var t=g();Y[0].width=t.width,Y[0].height=t.height;for(var i,r=0;e>=r;r++)i=Math.floor(t.width*(r/e)),K.fillRect(i-1,0,2,t.height)}}function h(){z=M[0].getBoundingClientRect()}function g(){return H(),z}function $(n){if(!t[0].hasAttribute("disabled")){var i;n.keyCode===l.KEY_CODE.LEFT_ARROW?i=-W:n.keyCode===l.KEY_CODE.RIGHT_ARROW&&(i=W),i&&((n.metaKey||n.ctrlKey||n.altKey)&&(i*=4),n.preventDefault(),n.stopPropagation(),e.$evalAsync(function(){b(s.$viewValue+i)}))}}function b(e){s.$setViewValue(y(w(e)))}function T(){isNaN(s.$viewValue)&&(s.$viewValue=s.$modelValue);var n=(s.$viewValue-U)/(L-U);e.modelValue=s.$viewValue,t.attr("aria-valuenow",s.$viewValue),k(n)}function y(e){return angular.isNumber(e)?Math.max(U,Math.min(L,e)):void 0}function w(e){return angular.isNumber(e)?Math.round(e/W)*W:void 0}function k(e){F.css("width",100*e+"%"),_.css(a.TRANSFORM,"translate3d("+g().width*e+"px,0,0)"),t.toggleClass("md-min",0===e)}function A(e){G||e.eventType!==Hammer.INPUT_START||t[0].hasAttribute("disabled")?G&&e.eventType===Hammer.INPUT_END&&(G&&j&&E(e),G=!1,t.removeClass("panning active")):(G=!0,t.addClass("active"),t[0].focus(),h(),x(e),e.srcEvent.stopPropagation())}function C(){G&&t.addClass("panning")}function x(e){G&&(j?R(e.center.x):S(e.center.x),e.preventDefault(),e.srcEvent.stopPropagation())}function E(e){if(j&&!t[0].hasAttribute("disabled")){var n=O(N(e.center.x)),r=y(w(n));k(I(r)),i(function(){b(r)}),e.preventDefault(),e.srcEvent.stopPropagation()}}function S(t){e.$evalAsync(function(){b(O(N(t)))})}function R(e){k(N(e))}function N(e){return Math.max(0,Math.min(1,(e-z.left)/z.width))}function O(e){return U+e*(L-U)}function I(e){return(e-U)/(L-U)}var D=angular.element(t[0].querySelector(".md-thumb")),_=D.parent(),M=angular.element(t[0].querySelector(".md-track-container")),F=angular.element(t[0].querySelector(".md-track-fill")),P=angular.element(t[0].querySelector(".md-track-ticks")),H=c.throttle(h,5e3);n.min?n.$observe("min",d):d(0),n.max?n.$observe("max",m):m(100),n.step?n.$observe("step",f):f(1);var V=angular.noop;n.ngDisabled?V=e.$parent.$watch(n.ngDisabled,p):p(!!n.disabled),o.expect(t,"aria-label"),t.attr("tabIndex",0),t.attr("role","slider"),t.on("keydown",$);var q=new Hammer(t[0],{recognizers:[[Hammer.Pan,{direction:Hammer.DIRECTION_HORIZONTAL}]]});q.on("hammer.input",A),q.on("panstart",C),q.on("pan",x),q.on("panend",E),setTimeout(u);var B=i.debounce(u);angular.element(r).on("resize",B),e.$on("$destroy",function(){angular.element(r).off("resize",B),q.destroy(),V()}),s.$render=T,s.$viewChangeListeners.push(T),s.$formatters.push(y),s.$formatters.push(w);var U,L,W,Y,K,z={};h();var G=!1,j=angular.isDefined(n.discrete);this._onInput=A,this._onPanStart=C,this._onPan=x}}angular.module("material.components.slider",["material.core","material.animations","material.services.aria","material.services.theming"]).directive("mdSlider",["$mdTheming",e])}(),function(){function e(e,t,n,i,r){function a(e){function n(e,t){t.addClass("md-sticky-clone");var n={element:e,clone:t};return f.items.push(n),d.parent().prepend(n.clone),m(),function(){f.items.forEach(function(t,n){t.element[0]===e[0]&&(f.items.splice(n,1),t.clone.remove())}),m()}}function r(){d[0].getBoundingClientRect();f.items.forEach(a),f.items=f.items.sort(function(e,t){return e.top<t.top?-1:1});for(var e,t=d.prop("scrollTop"),n=f.items.length-1;n>=0;n--)if(t>f.items[n].top){e=f.items[n];break}l(e)}function a(e){var t=e.element[0];for(e.top=0,e.left=0;t&&t!==d[0];)e.top+=t.offsetTop,e.left+=t.offsetLeft,t=t.offsetParent;e.height=e.element.prop("offsetHeight"),e.clone.css("margin-left",e.left+"px")}function o(){var e=d.prop("scrollTop"),t=e>(o.prevScrollTop||0);o.prevScrollTop=e,0===e?l(null):t&&f.next?f.next.top-e<=0?l(f.next):f.current&&(f.next.top-e<=f.next.height?u(f.current,f.next.top-f.next.height-e):u(f.current,null)):!t&&f.current&&(e<f.current.top&&l(f.prev),f.current&&f.next&&(e>=f.next.top-f.current.height?u(f.current,f.next.top-e-f.current.height):u(f.current,null)))}function l(e){if(f.current!==e){f.current&&(u(f.current,null),s(f.current,null)),e&&s(e,"active"),f.current=e;var t=f.items.indexOf(e);f.next=f.items[t+1],f.prev=f.items[t-1],s(f.next,"next"),s(f.prev,"prev")}}function s(e,t){e&&e.state!==t&&(e.state&&(e.clone.attr("sticky-prev-state",e.state),e.element.attr("sticky-prev-state",e.state)),e.clone.attr("sticky-state",t),e.element.attr("sticky-state",t),e.state=t)}function u(e,n){e&&(null===n||void 0===n?e.translateY&&(e.translateY=null,e.clone.css(t.TRANSFORM,"")):(e.translateY=n,e.clone.css(t.TRANSFORM,"translate3d("+e.left+"px,"+n+"px,0)")))}var d=e.$element,m=i.debounce(r);c(d),d.on("$scrollstart",m),d.on("$scroll",o);var f;return f={prev:null,current:null,next:null,items:[],add:n,refreshElements:r}}function o(){var t,n=angular.element("<div>");e[0].body.appendChild(n[0]);for(var i=["sticky","-webkit-sticky"],r=0;r<i.length;++r)if(n.css({position:i[r],top:0,"z-index":2}),n.css("position")==i[r]){t=i[r];break}return n.remove(),t}function c(e){function t(){+r.now()-a>o?(n=!1,e.triggerHandler("$scrollend")):(e.triggerHandler("$scroll"),i(t))}var n,a,o=200;e.on("scroll touchmove",function(){n||(n=!0,i(t),e.triggerHandler("$scrollstart")),e.triggerHandler("$scroll"),a=+r.now()})}var l=o();return function(e,t,n){var i=t.controller("mdContent");if(i)if(l)t.css({position:l,top:0,"z-index":2});else{var r=i.$element.data("$$sticky");r||(r=a(i),i.$element.data("$$sticky",r));var o=r.add(t,n||t.clone());e.$on("$destroy",o)}}}angular.module("material.components.sticky",["material.core","material.components.content","material.animations"]).factory("$mdSticky",["$document","$mdEffects","$compile","$$rAF","$mdUtil",e])}(),function(){function e(e,t,n){return{restrict:"E",replace:!0,transclude:!0,template:'<h2 class="md-subheader"><span class="md-subheader-content"></span></h2>',compile:function(i,r,a){var o=i[0].outerHTML;return function(i,r){function c(e){return angular.element(e[0].querySelector(".md-subheader-content"))}n(r),a(i,function(e){c(r).append(e)}),a(i,function(a){var l=t(angular.element(o))(i);n(l),c(l).append(a),e(i,r,l)})}}}}angular.module("material.components.subheader",["material.components.sticky","material.services.theming"]).directive("mdSubheader",["$mdSticky","$compile","$mdTheming",e])}(),function(){!function(){function e(e,t,n){return function(i,r,a){var o=n.toLowerCase(),c="md"+n,l=e(a[c])||angular.noop,s=t(i,o),u=function(e){l(i,e)};s(r,function(e){e.type==o&&u()})}}angular.module("material.components.swipe",["ng"]).factory("$mdSwipe",function(){return function(e,t){return t||(t="swipeleft swiperight"),function(n,i,r){function a(t){t.srcEvent.stopPropagation(),angular.isFunction(i)&&e.$apply(function(){i(t)})}function o(){return l.on(t,a),function(){l.off(t)}}function c(e,t){var n=t.indexOf("pan")>-1,i=t.indexOf("swipe")>-1;return n&&e.push([Hammer.Pan,{direction:Hammer.DIRECTION_HORIZONTAL}]),i&&e.push([Hammer.Swipe,{direction:Hammer.DIRECTION_HORIZONTAL}]),e}var l=new Hammer(n[0],{recognizers:c([],t)});return r||o(),e.$on("$destroy",function(){l.destroy()}),o}}}).directive("mdSwipeLeft",["$parse","$mdSwipe",function(t,n){return{restrict:"A",link:e(t,n,"SwipeLeft")}}]).directive("mdSwipeRight",["$parse","$mdSwipe",function(t,n){return{restrict:"A",link:e(t,n,"SwipeRight")}}])}()}(),function(){function e(e,t,n){function i(e,t){var i=angular.element(e[0].querySelector(".md-switch-thumb"));i.attr("disabled",t.disabled),i.attr("ngDisabled",t.ngDisabled);var a=r.compile(i,t);return function(e,t,i,r){n(t);var o=angular.element(t[0].querySelector(".md-switch-thumb"));return a(e,o,i,r)}}var r=e[0],a=t[0];return{restrict:"E",transclude:!0,template:'<div class="md-switch-bar"></div><div class="md-switch-thumb">'+a.template+"</div>",require:"?ngModel",compile:i}}angular.module("material.components.switch",["material.components.checkbox","material.components.radioButton","material.services.theming"]).directive("mdSwitch",["mdCheckboxDirective","mdRadioButtonDirective","$mdTheming",e])}(),function(){angular.module("material.components.tabs",["material.core","material.animations","material.services.theming","material.services.aria"])}(),function(){function e(e,t){return{restrict:"E",replace:!0,scope:{fid:"@?",label:"@?",value:"=ngModel"},compile:function(n,i){return angular.isUndefined(i.fid)&&(i.fid=t.nextUid()),{pre:function(e,t,n){angular.isDefined(n.disabled)&&(t.attr("disabled",!0),e.isDisabled=!0),e.inputType=n.type||"text",t.removeAttr("type"),t.attr("class",n.class)
},post:e}},template:'<md-input-group ng-disabled="isDisabled" tabindex="-1"> <label for="{{fid}}" >{{label}}</label> <md-input id="{{fid}}" ng-model="value" type="{{inputType}}"></md-input></md-input-group>'}}function t(){return{restrict:"CE",controller:["$element",function(e){this.setFocused=function(t){e.toggleClass("md-input-focused",!!t)},this.setHasValue=function(t){e.toggleClass("md-input-has-value",t)}}]}}function n(e){return{restrict:"E",replace:!0,template:"<input >",require:["^?mdInputGroup","?ngModel"],link:function(t,n,i,r){function a(e){return e=angular.isUndefined(e)?n.val():e,angular.isDefined(e)&&null!==e&&""!=e.toString().trim()}if(r[0]){var o=r[0],c=r[1],l=e.isParentDisabled(n);n.attr({tabindex:l?-1:0,"aria-disabled":l?"true":"false",type:i.type||n.parent().attr("type")||"text"}),c&&c.$formatters.push(function(e){return o.setHasValue(a(e)),e}),n.on("input",function(){o.setHasValue(a())}).on("focus",function(){o.setFocused(!0)}).on("blur",function(){o.setFocused(!1),o.setHasValue(a())}),t.$on("$destroy",function(){o.setFocused(!1),o.setHasValue(!1)})}}}}angular.module("material.components.textField",["material.core","material.services.theming"]).directive("mdInputGroup",[t]).directive("mdInput",["$mdUtil",n]).directive("mdTextFloat",["$mdTheming","$mdUtil",e])}(),function(){function e(){return{restrict:"E"}}function t(e,t,n,i){function r(t,r,a){r.addClass(a.position.split(" ").map(function(e){return"md-"+e}).join(" ")),a.parent.addClass(o(a.position));var c=i(t,"swipeleft swiperight");return a.detachSwipe=c(r,function(t){r.addClass("md-"+t.type),e(l.hide)}),n.enter(r,a.parent)}function a(e,t,i){return i.detachSwipe(),i.parent.removeClass(o(i.position)),n.leave(t)}function o(e){return"md-toast-open-"+(e.indexOf("top")>-1?"top":"bottom")}var c={onShow:r,onRemove:a,position:"bottom left",themable:!0,hideDelay:3e3},l=t(c);return l}angular.module("material.components.toast",["material.services.interimElement","material.components.swipe"]).directive("mdToast",[e]).factory("$mdToast",["$timeout","$$interimElement","$animate","$mdSwipe",t])}(),function(){function e(e,t,n,i){return{restrict:"E",controller:angular.noop,link:function(r,a,o){function c(){function i(t,i){n.elementIsSibling(a,i)&&(u&&u.off("scroll",p),i.on("scroll",p),i.attr("scroll-shrink","true"),u=i,e(c))}function c(){s=a.prop("offsetHeight"),u.css("margin-top",-s*f+"px"),l()}function l(e){var n=e?e.target.scrollTop:m;v(),d=Math.min(s/f,Math.max(0,d+n-m)),a.css(t.TRANSFORM,"translate3d(0,"+-d*f+"px,0)"),u.css(t.TRANSFORM,"translate3d(0,"+(s-d)*f+"px,0)"),m=n}var s,u,d=0,m=0,f=o.shrinkSpeedFactor||.5,p=e.debounce(l),v=n.debounce(c,5e3);r.$on("$mdContentLoaded",i)}i(a),angular.isDefined(o.scrollShrink)&&c()}}}angular.module("material.components.toolbar",["material.core","material.components.content","material.services.theming","material.animations"]).directive("mdToolbar",["$$rAF","$mdEffects","$mdUtil","$mdTheming",e])}(),function(){function e(e,t,n,i,r,a){function o(o,u,d,m){function f(){o.visible&&g()}function p(t){p.value=!!t,p.queued||(t?(p.queued=!0,e(function(){o.visible=p.value,p.queued=!1},c)):e(function(){o.visible=!1}))}function v(){u.removeClass("md-hide"),$.attr("aria-describedby",u.attr("id")),s.append(u),n(function(){n(function(){g(),o.visible&&u.addClass("md-show")})})}function h(){u.removeClass("md-show").addClass("md-hide"),$.removeAttr("aria-describedby"),e(function(){o.visible||u.detach()},200,!1)}function g(){var e=u[0].getBoundingClientRect(),n=$[0].getBoundingClientRect();m&&(n.top+=m.$element.prop("scrollTop"),n.left+=m.$element.prop("scrollLeft"));var i="bottom",r={left:n.left+n.width/2-e.width/2,top:n.top+n.height};r.left=Math.min(r.left,t.innerWidth-e.width-l),r.left=Math.max(r.left,l),r.top+e.height>t.innerHeight&&(r.top=n.top-e.height,i="top"),u.css({top:r.top+"px",left:r.left+"px"}),u.attr("width-32",Math.ceil(e.width/32)),u.attr("md-direction",i)}a(u);var $=u.parent();u.detach(),u.attr("role","tooltip"),u.attr("id",d.id||"tooltip_"+r.nextUid()),$.on("focus mouseenter touchstart",function(){p(!0)}),$.on("blur mouseleave touchend touchcancel",function(){i.activeElement!==$[0]&&p(!1)}),o.$watch("visible",function(e){e?v():h()});var b=n.debounce(f);angular.element(t).on("resize",b),o.$on("$destroy",function(){o.visible=!1,u.remove(),angular.element(t).off("resize",b)})}var c=400,l=8,s=angular.element(document.body);return{restrict:"E",transclude:!0,require:"^?mdContent",template:'<div class="md-background"></div><div class="md-content" ng-transclude></div>',scope:{visible:"=?"},link:o}}angular.module("material.components.tooltip",["material.core","material.services.theming"]).directive("mdTooltip",["$timeout","$window","$$rAF","$document","$mdUtil","$mdTheming",e])}(),function(){angular.module("material.components.whiteframe",[])}(),function(){function e(e,t){function n(e,n,i){var r=e[0];r.hasAttribute(n)||(i=angular.isString(i)&&i.trim()||"",i.length?e.attr(n,i):t.warn('ARIA: Attribute "',n,'", required for accessibility, is missing on node:',r))}function i(t,i,r){e(function(){n(t,i,r())})}function r(e,t){i(e,t,function(){return e.text().trim()})}return{expect:n,expectAsync:i,expectWithText:r}}angular.module("material.services.aria",[]).service("$mdAria",["$$rAF","$log",e])}(),function(){function e(e,t){var n=/^\s*([@=&])(\??)\s*(\w*)\s*$/;return function(i,r,a,o){function c(e,t,n){if(!angular.isDefined(r[e])){var a=o&&o.hasOwnProperty(t);return i[t]=a?o[t]:n,!0}return!1}angular.forEach(a||{},function(a,o){var l,s,u=a.match(n)||[],d=u[3]||o,m=u[1];switch(m){case"@":r.$observe(d,function(e){i[o]=e}),r.$$observers[d].$$scope=i,c(d,o)||(i[o]=t(r[d])(i));break;case"=":c(d,o)||(i[o]=""===r[d]?!0:i.$eval(r[d]),s=i.$watch(r[d],function(e){i[o]=e}),i.$on("$destroy",s));break;case"&":if(!c(d,o,angular.noop)){if(r[d]&&r[d].match(RegExp(o+"(.*?)")))throw new Error('& expression binding "'+o+'" looks like it will recursively call "'+r[d]+'" and cause a stack overflow! Please choose a different scopeName.');l=e(r[d]),i[o]=function(e){return l(i,e)}}}})}}angular.module("material.services.attrBind",[]).factory("$attrBind",["$parse","$interpolate",e])}(),function(){function e(e,t,n,i,r,a){this.compile=function(o){var c=o.templateUrl,l=o.template||"",s=o.controller,u=o.controllerAs,d=o.resolve||{},m=o.locals||{},f=o.transformTemplate||angular.identity;return angular.forEach(d,function(e,t){d[t]=angular.isString(e)?n.get(e):n.invoke(e)}),angular.extend(d,m),d.$template=c?t.get(c,{cache:a}).then(function(e){return e.data}):e.when(l),e.all(d).then(function(e){var t=f(e.$template),n=angular.element("<div>").html(t).contents(),a=i(n);return{locals:e,element:n,link:function(t){if(e.$scope=t,s){var i=r(s,e);n.data("$ngControllerController",i),n.children().data("$ngControllerController",i),u&&(t[u]=i)}return a(t)}}})}}angular.module("material.services.compiler",[]).service("$mdCompiler",["$q","$http","$injector","$compile","$controller","$templateCache",e])}(),function(){function e(e,t,n,i,r,a,o){return function(c){function l(e){m.length&&f.hide();var t=new d(e);return m.push(t),t.show().then(function(){return t.deferred.promise})}function s(e){var t=m.shift();t&&t.remove().then(function(){t.deferred.resolve(e)})}function u(e){var t=m.shift();t&&t.remove().then(function(){t.deferred.reject(e)})}function d(r){var l,s,u;return r=r||{},r=angular.extend({scope:r.scope||t.$new(r.isolateScope)},c,r),l={options:r,deferred:e.defer(),show:function(){return a.compile(r).then(function(t){function a(){r.hideDelay&&(s=n(f.hide,r.hideDelay))}r.parent||(r.parent=i.find("body"),r.parent.length||(r.parent=i)),u=t.link(r.scope),r.themable&&o(u);var c=r.onShow(r.scope,u,r);return e.when(c).then(function(){var e=r.onComplete||angular.noop;e.apply(null,[r.scope,u,r])}).then(a)})},cancelTimeout:function(){s&&(n.cancel(s),s=void 0)},remove:function(){l.cancelTimeout();var t=r.onRemove(r.scope,u,r);return e.when(t).then(function(){r.scope.$destroy()})}}}var m=[];c=angular.extend({onShow:function(e,t,n){return r.enter(t,n.parent)},onRemove:function(e,t){return r.leave(t)}},c||{});var f;return f={show:l,hide:s,cancel:u}}}angular.module("material.services.interimElement",["material.services.compiler","material.services.theming"]).factory("$$interimElement",["$q","$rootScope","$timeout","$rootElement","$animate","$mdCompiler","$mdTheming",e])}(),function(){function e(e,t,n){function i(e){e=r(e);var t;return angular.isDefined(t=c.get(e))?t:a(e)}function r(e){return l[e]||("("!=e.charAt(0)?"("+e+")":e)}function a(t){return c.put(t,!!e.matchMedia(t).matches)}function o(){var t=c.keys();if(t.length){for(var i=0,r=t.length;r>i;i++)c.put(t[i],!!e.matchMedia(t[i]).matches);n(angular.noop)}}var c=t.cacheFactory("$mdMedia",{capacity:15}),l={sm:"(min-width: 600px)",md:"(min-width: 960px)",lg:"(min-width: 1200px)"};return angular.element(e).on("resize",o),i}angular.module("material.services.media",["material.core"]).factory("$mdMedia",["$window","$mdUtil","$timeout",e])}(),function(){function e(e){var t=[];return{notFoundError:function(t){e.error("No instance found for handle",t)},getInstances:function(){return t},get:function(e){var n,i,r;for(n=0,i=t.length;i>n;n++)if(r=t[n],r.$$mdHandle===e)return r;return null},register:function(e,n){return e.$$mdHandle=n,t.push(e),function(){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}}}}angular.module("material.services.registry",[]).factory("$mdComponentRegistry",["$log",e])}(),function(){function e(){function e(e,i){function r(e,t){void 0===t&&(t=e,e=void 0),void 0===e&&(e=i),r.inherit(t,t)}return r.inherit=function(e,r){function a(t){var n=e.data("$mdThemeName");n&&e.removeClass("md-"+n+"-theme"),e.addClass("md-"+t+"-theme"),e.data("$mdThemeName",t)}var o=r.controller("mdTheme"),c=e.attr("md-theme-watch");if((n||angular.isDefined(c))&&"false"!=c){var l=i.$watch(function(){return o&&o.$mdTheme||t},a);e.on("$destroy",l)}else{var s=o&&o.$mdTheme||t;a(s)}},r}var t="default",n=!1;return{setDefaultTheme:function(e){t=e},alwaysWatchTheme:function(e){n=e},$get:["$rootElement","$rootScope",e]}}function t(e){return{priority:100,link:{pre:function(t,n,i){var r={$setTheme:function(e){r.$mdTheme=e}};n.data("$mdThemeController",r),r.$setTheme(e(i.mdTheme)(t)),i.$observe("mdTheme",r.$setTheme)}}}}function n(e){return e}angular.module("material.services.theming",[]).directive("mdTheme",["$interpolate",t]).directive("mdThemable",["$mdTheming",n]).provider("$mdTheming",[e])}(),function(){function e(e,t,n,i){function r(r,a,o,c){function l(){m(),i(m,100,!1)}function s(){var t=d.selected()&&d.selected().element;if(!t||d.count()<2)a.css({display:"none",width:"0px"});else{var n=t.prop("offsetWidth"),i=t.prop("offsetLeft")+(d.$$pagingOffset||0);a.css({display:n>0?"block":"none",width:n+"px"}),a.css(e.TRANSFORM,"translate3d("+i+"px,0,0)")}}var u=c[0],d=c[1];if(!u){var m=n.debounce(s);r.$watch(d.selected,s),r.$on("$mdTabsChanged",m),r.$on("$mdTabsPaginationChanged",m),angular.element(t).on("resize",l),r.$on("$destroy",function(){angular.element(t).off("resize",l)})}}return{restrict:"E",require:["^?nobar","^mdTabs"],link:r}}angular.module("material.components.tabs").directive("mdTabsInkBar",["$mdEffects","$window","$$rAF","$timeout",e])}(),function(){function e(e,t,n,i,r){function a(a,l,s,u){function d(e){if(b.active){var t=angular.element(e.target).controller("mdTab"),n=h(t);n!==b.page&&(t.element.blur(),g(n).then(function(){t.element.focus()}))}}function m(e){if(e)if(b.active){var t=h(e);g(t)}else T()}function f(e){var t,n=b.page+e;if(!u.selected()||h(u.selected())!==n){var i;0>e?(i=(n+1)*b.itemsPerPage,t=u.previous(u.itemAt(i))):(i=n*b.itemsPerPage-1,t=u.next(u.itemAt(i)))}g(n).then(function(){t&&t.element.focus()}),t&&u.select(t)}function p(){var e=l.find("md-tab"),t=l.parent().prop("clientWidth")-c,n=t&&o*u.count()>t,i=n!==b.active;if(0>=t&&(n=!1,i=!0),b.active=n,n){b.pagesCount=Math.ceil(o*u.count()/t),b.itemsPerPage=Math.max(1,Math.floor(u.count()/b.pagesCount)),b.tabWidth=t/b.itemsPerPage,$.css("width",b.tabWidth*u.count()+"px"),e.css("width",b.tabWidth+"px");var a=h(u.selected());g(a)}else i&&r(function(){$.css("width",""),e.css("width",""),v(0),b.page=-1})}function v(t){function n(t){t.target===$[0]&&($.off(e.TRANSITIONEND_EVENT,n),r.resolve())}if(u.pagingOffset===t)return i.when();var r=i.defer();return u.$$pagingOffset=t,$.css(e.TRANSFORM,"translate3d("+t+"px,0,0)"),$.on(e.TRANSITIONEND_EVENT,n),r.promise}function h(e){var t=u.indexOf(e);return-1===t?0:Math.floor(t/b.itemsPerPage)}function g(e){if(e!==b.page){var t=b.pagesCount;return 0>e&&(e=0),e>t&&(e=t),b.hasPrev=e>0,b.hasNext=(e+1)*b.itemsPerPage<u.count(),b.page=e,r(function(){a.$broadcast("$mdTabsPaginationChanged")}),v(-e*b.itemsPerPage*b.tabWidth)}}var $=l.children(),b=a.pagination={page:-1,active:!1,clickNext:function(){f(1)},clickPrevious:function(){f(-1)}};p();var T=n.debounce(p);a.$on("$mdTabsChanged",T),angular.element(t).on("resize",T),$.on("focusin",d),a.$on("$destroy",function(){angular.element(t).off("resize",T),$.off("focusin",d)}),a.$watch(u.selected,m)}var o=96,c=64;return{restrict:"A",require:"^mdTabs",link:a}}angular.module("material.components.tabs").directive("mdTabsPagination",["$mdEffects","$window","$$rAF","$$q","$timeout",e])}(),function(){function e(e,t,n,i,r){function a(){return t[0].hasAttribute("disabled")}function o(t){u.content.length&&(u.contentContainer.append(u.content),u.contentScope=e.$parent.$new(),t.append(u.contentContainer),n(u.contentContainer)(u.contentScope),r.disconnectScope(u.contentScope))}function c(){u.hammertime.destroy(),i.leave(u.contentContainer).then(function(){u.contentScope&&u.contentScope.$destroy(),u.contentScope=null})}function l(){r.reconnectScope(u.contentScope),u.hammertime.on("swipeleft swiperight",e.onSwipe),t.addClass("active"),t.attr("aria-selected",!0),t.attr("tabIndex",0),i.removeClass(u.contentContainer,"ng-hide"),e.onSelect()}function s(){r.disconnectScope(u.contentScope),u.hammertime.off("swipeleft swiperight",e.onSwipe),t.removeClass("active"),t.attr("aria-selected",!1),t.attr("tabIndex",-1),i.addClass(u.contentContainer,"ng-hide"),e.onDeselect()}var u=this;u.contentContainer=angular.element('<div class="md-tab-content ng-hide">'),u.hammertime=Hammer(u.contentContainer[0]),u.element=t,u.isDisabled=a,u.onAdd=o,u.onRemove=c,u.onSelect=l,u.onDeselect=s}angular.module("material.components.tabs").controller("$mdTab",["$scope","$element","$compile","$animate","$mdUtil",e])}(),function(){function e(e,t,n,i,r){function a(n,a){var o=n.find("md-tab-label");o.length?o.remove():o=angular.isDefined(a.label)?angular.element("<md-tab-label>").html(a.label):angular.element("<md-tab-label>").append(n.contents().remove());var c=n.contents().remove();return function(n,a,l,s){function u(){var e=o.clone();a.append(e),t(e)(n.$parent),$.content=c.clone()}function d(){n.$apply(function(){b.select($),$.element.focus()})}function m(e){if(e.keyCode==r.KEY_CODE.SPACE||e.keyCode==r.KEY_CODE.ENTER)a.triggerHandler("click"),e.preventDefault();else if(e.keyCode===r.KEY_CODE.LEFT_ARROW){var t=b.previous($);t&&t.element.focus()}else if(e.keyCode===r.KEY_CODE.RIGHT_ARROW){var n=b.next($);n&&n.element.focus()}}function f(e){n.$apply(function(){"swipeleft"===e.type?b.select(b.next()):b.select(b.previous())})}function p(){n.$watch("$parent.$index",function(e){b.move($,e)})}function v(){function e(e){var t=b.selected()===$;e&&!t?b.select($):!e&&t&&b.deselect($)}var t=n.$parent.$watch("!!("+l.active+")",e);n.$on("$destroy",t)}function h(){function e(e){a.attr("aria-disabled",e);var t=b.selected()===$;t&&e&&b.select(b.next()||b.previous())}n.$watch($.isDisabled,e)}function g(){var e=l.id||"tab_"+i.nextUid();if(a.attr({id:e,role:"tab",tabIndex:-1}),c.length){var t="content_"+e;a.attr("aria-controls")||a.attr("aria-controls",t),$.contentContainer.attr({id:t,role:"tabpanel","aria-labelledby":e})}}var $=s[0],b=s[1];u(),g();var T=e.attachButtonBehavior(a);b.add($),n.$on("$destroy",function(){T(),b.remove($)}),angular.isDefined(l.ngClick)||a.on("click",d),a.on("keydown",m),n.onSwipe=f,angular.isNumber(n.$parent.$index)&&p(),angular.isDefined(l.active)&&v(),h()}}return{restrict:"E",require:["mdTab","^mdTabs"],controller:"$mdTab",scope:{onSelect:"&",onDeselect:"&",label:"@"},compile:a}}angular.module("material.components.tabs").directive("mdTab",["$mdInkRipple","$compile","$mdAria","$mdUtil","$mdConstant",e])}(),function(){function e(e,t,n){function i(){return f.itemAt(e.selectedIndex)}function r(t,n){m.add(t,n),t.onAdd(f.contentArea),-1!==e.selectedIndex&&angular.isNumber(e.selectedIndex)&&e.selectedIndex!==f.indexOf(t)||f.select(t),e.$broadcast("$mdTabsChanged")}function a(t,n){m.contains(t)&&(n||f.selected()===t&&(m.count()>1?f.select(f.previous()||f.next()):f.deselect(t)),m.remove(t),t.onRemove(),e.$broadcast("$mdTabsChanged"))}function o(t,n){var i=f.selected()===t;m.remove(t),m.add(t,n),i&&f.select(t),e.$broadcast("$mdTabsChanged")}function c(t){!t||t.isSelected||t.isDisabled()||m.contains(t)&&(f.deselect(f.selected()),e.selectedIndex=f.indexOf(t),t.isSelected=!0,t.onSelect())}function l(t){t&&t.isSelected&&m.contains(t)&&(e.selectedIndex=-1,t.isSelected=!1,t.onDeselect())}function s(e,t){return m.next(e||f.selected(),t||d)}function u(e,t){return m.previous(e||f.selected(),t||d)}function d(e){return e&&!e.isDisabled()}var m=n.iterator([],!1),f=this;f.element=t,f.contentArea=angular.element(t[0].querySelector(".md-tabs-content")),f.inRange=m.inRange,f.indexOf=m.indexOf,f.itemAt=m.itemAt,f.count=m.count,f.selected=i,f.add=r,f.remove=a,f.move=o,f.select=c,f.deselect=l,f.next=s,f.previous=u,e.$on("$destroy",function(){f.deselect(f.selected());for(var e=m.count()-1;e>=0;e--)f.remove(m[e],!0)})}angular.module("material.components.tabs").controller("$mdTabs",["$scope","$element","$mdUtil",e])}(),function(){function e(e,t){function n(e,n,i,r){function a(){n.attr({role:"tablist"})}function o(){e.$watch("selectedIndex",function(e,t){if(r.deselect(r.itemAt(t)),r.inRange(e)){var n=r.itemAt(e);n&&n.isDisabled()&&(n=e>t?r.next(n):r.previous(n)),r.select(n)}})}t(n),a(),o()}return{restrict:"E",controller:"$mdTabs",require:"mdTabs",transclude:!0,scope:{selectedIndex:"=?selected"},template:'<section class="md-header" ng-class="{\'md-paginating\': pagination.active}"><button class="md-paginator md-prev" ng-if="pagination.active && pagination.hasPrev" ng-click="pagination.clickPrevious()" aria-hidden="true"></button><div class="md-header-items-container" md-tabs-pagination><div class="md-header-items" ng-transclude></div><md-tabs-ink-bar></md-tabs-ink-bar></div><button class="md-paginator md-next" ng-if="pagination.active && pagination.hasNext" ng-click="pagination.clickNext()" aria-hidden="true"></button></section><section class="md-tabs-content"></section>',link:n}}angular.module("material.components.tabs").directive("mdTabs",["$parse","$mdTheming",e])}();
!!function(){angular.module("angularytics",[]).provider("Angularytics",function(){var e=["Google"];this.setEventHandlers=function(n){angular.isString(n)&&(n=[n]),e=[],angular.forEach(n,function(n){e.push(t(n))})};var t=function(e){return e.charAt(0).toUpperCase()+e.substring(1)},n="$locationChangeSuccess";this.setPageChangeEvent=function(e){n=e},this.$get=["$injector","$rootScope","$location",function(t,i,a){var o=[];angular.forEach(e,function(e){o.push(t.get("Angularytics"+e+"Handler"))});var r=function(e){angular.forEach(o,function(t){e(t)})},s={};return s.init=function(){},s.trackEvent=function(e,t,n,i,a){r(function(o){e&&t&&o.trackEvent(e,t,n,i,a)})},s.trackPageView=function(e){r(function(t){e&&t.trackPageView(e)})},i.$on(n,function(){s.trackPageView(a.url())}),s}]})}(),function(){angular.module("angularytics").factory("AngularyticsConsoleHandler",["$log",function(e){var t={};return t.trackPageView=function(t){e.log("URL visited",t)},t.trackEvent=function(t,n,i,a,o){e.log("Event tracked",t,n,i,a,o)},t}])}(),function(){angular.module("angularytics").factory("AngularyticsGoogleHandler",["$log",function(){var e={};return e.trackPageView=function(e){_gaq.push(["_set","page",e]),_gaq.push(["_trackPageview",e])},e.trackEvent=function(e,t,n,i,a){_gaq.push(["_trackEvent",e,t,n,i,a])},e}]).factory("AngularyticsGoogleUniversalHandler",function(){var e={};return e.trackPageView=function(e){ga("set","page",e),ga("send","pageview",e)},e.trackEvent=function(e,t,n,i,a){ga("send","event",e,t,n,i,{nonInteraction:a})},e})}(),function(){angular.module("angularytics").filter("trackEvent",["Angularytics",function(e){return function(t,n,i,a,o,r){return e.trackEvent(n,i,a,o,r),t}}])}(),function(e,t,n,i){"use strict";function a(e,t,n){return setTimeout(d(e,n),t)}function o(e,t,n){return Array.isArray(e)?(r(e,n[t],n),!0):!1}function r(e,t,n){var a;if(e)if(e.forEach)e.forEach(t,n);else if(e.length!==i)for(a=0;a<e.length;)t.call(n,e[a],a,e),a++;else for(a in e)e.hasOwnProperty(a)&&t.call(n,e[a],a,e)}function s(e,t,n){for(var a=Object.keys(t),o=0;o<a.length;)(!n||n&&e[a[o]]===i)&&(e[a[o]]=t[a[o]]),o++;return e}function l(e,t){return s(e,t,!0)}function c(e,t,n){var i,a=t.prototype;i=e.prototype=Object.create(a),i.constructor=e,i._super=a,n&&s(i,n)}function d(e,t){return function(){return e.apply(t,arguments)}}function u(e,t){return typeof e==dt?e.apply(t?t[0]||i:i,t):e}function m(e,t){return e===i?t:e}function p(e,t,n){r(g(t),function(t){e.addEventListener(t,n,!1)})}function h(e,t,n){r(g(t),function(t){e.removeEventListener(t,n,!1)})}function f(e,t){for(;e;){if(e==t)return!0;e=e.parentNode}return!1}function v(e,t){return e.indexOf(t)>-1}function g(e){return e.trim().split(/\s+/g)}function b(e,t,n){if(e.indexOf&&!n)return e.indexOf(t);for(var i=0;i<e.length;){if(n&&e[i][n]==t||!n&&e[i]===t)return i;i++}return-1}function y(e){return Array.prototype.slice.call(e,0)}function $(e,t,n){for(var i=[],a=[],o=0;o<e.length;){var r=t?e[o][t]:e[o];b(a,r)<0&&i.push(e[o]),a[o]=r,o++}return n&&(i=t?i.sort(function(e,n){return e[t]>n[t]}):i.sort()),i}function w(e,t){for(var n,a,o=t[0].toUpperCase()+t.slice(1),r=0;r<lt.length;){if(n=lt[r],a=n?n+o:t,a in e)return a;r++}return i}function T(){return ht++}function x(e){var t=e.ownerDocument;return t.defaultView||t.parentWindow}function C(e,t){var n=this;this.manager=e,this.callback=t,this.element=e.element,this.target=e.options.inputTarget,this.domHandler=function(t){u(e.options.enable,[e])&&n.handler(t)},this.init()}function S(e){var t,n=e.options.inputClass;return t=n?n:gt?_:bt?z:vt?q:j,new t(e,E)}function E(e,t,n){var i=n.pointers.length,a=n.changedPointers.length,o=t&Ct&&i-a===0,r=t&(Et|At)&&i-a===0;n.isFirst=!!o,n.isFinal=!!r,o&&(e.session={}),n.eventType=t,A(e,n),e.emit("hammer.input",n),e.recognize(n),e.session.prevInput=n}function A(e,t){var n=e.session,i=t.pointers,a=i.length;n.firstInput||(n.firstInput=P(t)),a>1&&!n.firstMultiple?n.firstMultiple=P(t):1===a&&(n.firstMultiple=!1);var o=n.firstInput,r=n.firstMultiple,s=r?r.center:o.center,l=t.center=B(i);t.timeStamp=pt(),t.deltaTime=t.timeStamp-o.timeStamp,t.angle=D(s,l),t.distance=R(s,l),k(n,t),t.offsetDirection=M(t.deltaX,t.deltaY),t.scale=r?O(r.pointers,i):1,t.rotation=r?U(r.pointers,i):0,N(n,t);var c=e.element;f(t.srcEvent.target,c)&&(c=t.srcEvent.target),t.target=c}function k(e,t){var n=t.center,i=e.offsetDelta||{},a=e.prevDelta||{},o=e.prevInput||{};(t.eventType===Ct||o.eventType===Et)&&(a=e.prevDelta={x:o.deltaX||0,y:o.deltaY||0},i=e.offsetDelta={x:n.x,y:n.y}),t.deltaX=a.x+(n.x-i.x),t.deltaY=a.y+(n.y-i.y)}function N(e,t){var n,a,o,r,s=e.lastInterval||t,l=t.timeStamp-s.timeStamp;if(t.eventType!=At&&(l>xt||s.velocity===i)){var c=s.deltaX-t.deltaX,d=s.deltaY-t.deltaY,u=I(l,c,d);a=u.x,o=u.y,n=mt(u.x)>mt(u.y)?u.x:u.y,r=M(c,d),e.lastInterval=t}else n=s.velocity,a=s.velocityX,o=s.velocityY,r=s.direction;t.velocity=n,t.velocityX=a,t.velocityY=o,t.direction=r}function P(e){for(var t=[],n=0;n<e.pointers.length;)t[n]={clientX:ut(e.pointers[n].clientX),clientY:ut(e.pointers[n].clientY)},n++;return{timeStamp:pt(),pointers:t,center:B(t),deltaX:e.deltaX,deltaY:e.deltaY}}function B(e){var t=e.length;if(1===t)return{x:ut(e[0].clientX),y:ut(e[0].clientY)};for(var n=0,i=0,a=0;t>a;)n+=e[a].clientX,i+=e[a].clientY,a++;return{x:ut(n/t),y:ut(i/t)}}function I(e,t,n){return{x:t/e||0,y:n/e||0}}function M(e,t){return e===t?kt:mt(e)>=mt(t)?e>0?Nt:Pt:t>0?Bt:It}function R(e,t,n){n||(n=Ut);var i=t[n[0]]-e[n[0]],a=t[n[1]]-e[n[1]];return Math.sqrt(i*i+a*a)}function D(e,t,n){n||(n=Ut);var i=t[n[0]]-e[n[0]],a=t[n[1]]-e[n[1]];return 180*Math.atan2(a,i)/Math.PI}function U(e,t){return D(t[1],t[0],Ot)-D(e[1],e[0],Ot)}function O(e,t){return R(t[0],t[1],Ot)/R(e[0],e[1],Ot)}function j(){this.evEl=_t,this.evWin=Ft,this.allow=!0,this.pressed=!1,C.apply(this,arguments)}function _(){this.evEl=Ht,this.evWin=qt,C.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function F(){this.evTarget=Wt,this.evWin=Yt,this.started=!1,C.apply(this,arguments)}function L(e,t){var n=y(e.touches),i=y(e.changedTouches);return t&(Et|At)&&(n=$(n.concat(i),"identifier",!0)),[n,i]}function z(){this.evTarget=Kt,this.targetIds={},C.apply(this,arguments)}function H(e,t){var n=y(e.touches),i=this.targetIds;if(t&(Ct|St)&&1===n.length)return i[n[0].identifier]=!0,[n,n];var a,o,r=y(e.changedTouches),s=[],l=this.target;if(o=n.filter(function(e){return f(e.target,l)}),t===Ct)for(a=0;a<o.length;)i[o[a].identifier]=!0,a++;for(a=0;a<r.length;)i[r[a].identifier]&&s.push(r[a]),t&(Et|At)&&delete i[r[a].identifier],a++;return s.length?[$(o.concat(s),"identifier",!0),s]:void 0}function q(){C.apply(this,arguments);var e=d(this.handler,this);this.touch=new z(this.manager,e),this.mouse=new j(this.manager,e)}function V(e,t){this.manager=e,this.set(t)}function W(e){if(v(e,tn))return tn;var t=v(e,nn),n=v(e,an);return t&&n?nn+" "+an:t||n?t?nn:an:v(e,en)?en:Jt}function Y(e){this.id=T(),this.manager=null,this.options=l(e||{},this.defaults),this.options.enable=m(this.options.enable,!0),this.state=on,this.simultaneous={},this.requireFail=[]}function G(e){return e&dn?"cancel":e&ln?"end":e&sn?"move":e&rn?"start":""}function K(e){return e==It?"down":e==Bt?"up":e==Nt?"left":e==Pt?"right":""}function X(e,t){var n=t.manager;return n?n.get(e):e}function Z(){Y.apply(this,arguments)}function Q(){Z.apply(this,arguments),this.pX=null,this.pY=null}function J(){Z.apply(this,arguments)}function et(){Y.apply(this,arguments),this._timer=null,this._input=null}function tt(){Z.apply(this,arguments)}function nt(){Z.apply(this,arguments)}function it(){Y.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function at(e,t){return t=t||{},t.recognizers=m(t.recognizers,at.defaults.preset),new ot(e,t)}function ot(e,t){t=t||{},this.options=l(t,at.defaults),this.options.inputTarget=this.options.inputTarget||e,this.handlers={},this.session={},this.recognizers=[],this.element=e,this.input=S(this),this.touchAction=new V(this,this.options.touchAction),rt(this,!0),r(t.recognizers,function(e){var t=this.add(new e[0](e[1]));e[2]&&t.recognizeWith(e[2]),e[3]&&t.requireFailure(e[3])},this)}function rt(e,t){var n=e.element;r(e.options.cssProps,function(e,i){n.style[w(n.style,i)]=t?e:""})}function st(e,n){var i=t.createEvent("Event");i.initEvent(e,!0,!0),i.gesture=n,n.target.dispatchEvent(i)}var lt=["","webkit","moz","MS","ms","o"],ct=t.createElement("div"),dt="function",ut=Math.round,mt=Math.abs,pt=Date.now,ht=1,ft=/mobile|tablet|ip(ad|hone|od)|android/i,vt="ontouchstart"in e,gt=w(e,"PointerEvent")!==i,bt=vt&&ft.test(navigator.userAgent),yt="touch",$t="pen",wt="mouse",Tt="kinect",xt=25,Ct=1,St=2,Et=4,At=8,kt=1,Nt=2,Pt=4,Bt=8,It=16,Mt=Nt|Pt,Rt=Bt|It,Dt=Mt|Rt,Ut=["x","y"],Ot=["clientX","clientY"];C.prototype={handler:function(){},init:function(){this.evEl&&p(this.element,this.evEl,this.domHandler),this.evTarget&&p(this.target,this.evTarget,this.domHandler),this.evWin&&p(x(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&h(this.element,this.evEl,this.domHandler),this.evTarget&&h(this.target,this.evTarget,this.domHandler),this.evWin&&h(x(this.element),this.evWin,this.domHandler)}};var jt={mousedown:Ct,mousemove:St,mouseup:Et},_t="mousedown",Ft="mousemove mouseup";c(j,C,{handler:function(e){var t=jt[e.type];t&Ct&&0===e.button&&(this.pressed=!0),t&St&&1!==e.which&&(t=Et),this.pressed&&this.allow&&(t&Et&&(this.pressed=!1),this.callback(this.manager,t,{pointers:[e],changedPointers:[e],pointerType:wt,srcEvent:e}))}});var Lt={pointerdown:Ct,pointermove:St,pointerup:Et,pointercancel:At,pointerout:At},zt={2:yt,3:$t,4:wt,5:Tt},Ht="pointerdown",qt="pointermove pointerup pointercancel";e.MSPointerEvent&&(Ht="MSPointerDown",qt="MSPointerMove MSPointerUp MSPointerCancel"),c(_,C,{handler:function(e){var t=this.store,n=!1,i=e.type.toLowerCase().replace("ms",""),a=Lt[i],o=zt[e.pointerType]||e.pointerType,r=o==yt,s=b(t,e.pointerId,"pointerId");a&Ct&&(0===e.button||r)?0>s&&(t.push(e),s=t.length-1):a&(Et|At)&&(n=!0),0>s||(t[s]=e,this.callback(this.manager,a,{pointers:t,changedPointers:[e],pointerType:o,srcEvent:e}),n&&t.splice(s,1))}});var Vt={touchstart:Ct,touchmove:St,touchend:Et,touchcancel:At},Wt="touchstart",Yt="touchstart touchmove touchend touchcancel";c(F,C,{handler:function(e){var t=Vt[e.type];if(t===Ct&&(this.started=!0),this.started){var n=L.call(this,e,t);t&(Et|At)&&n[0].length-n[1].length===0&&(this.started=!1),this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:yt,srcEvent:e})}}});var Gt={touchstart:Ct,touchmove:St,touchend:Et,touchcancel:At},Kt="touchstart touchmove touchend touchcancel";c(z,C,{handler:function(e){var t=Gt[e.type],n=H.call(this,e,t);n&&this.callback(this.manager,t,{pointers:n[0],changedPointers:n[1],pointerType:yt,srcEvent:e})}}),c(q,C,{handler:function(e,t,n){var i=n.pointerType==yt,a=n.pointerType==wt;if(i)this.mouse.allow=!1;else if(a&&!this.mouse.allow)return;t&(Et|At)&&(this.mouse.allow=!0),this.callback(e,t,n)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Xt=w(ct.style,"touchAction"),Zt=Xt!==i,Qt="compute",Jt="auto",en="manipulation",tn="none",nn="pan-x",an="pan-y";V.prototype={set:function(e){e==Qt&&(e=this.compute()),Zt&&(this.manager.element.style[Xt]=e),this.actions=e.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var e=[];return r(this.manager.recognizers,function(t){u(t.options.enable,[t])&&(e=e.concat(t.getTouchAction()))}),W(e.join(" "))},preventDefaults:function(e){if(!Zt){var t=e.srcEvent,n=e.offsetDirection;if(this.manager.session.prevented)return t.preventDefault(),void 0;var i=this.actions,a=v(i,tn),o=v(i,an),r=v(i,nn);return a||o&&n&Mt||r&&n&Rt?this.preventSrc(t):void 0}},preventSrc:function(e){this.manager.session.prevented=!0,e.preventDefault()}};var on=1,rn=2,sn=4,ln=8,cn=ln,dn=16,un=32;Y.prototype={defaults:{},set:function(e){return s(this.options,e),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(e){if(o(e,"recognizeWith",this))return this;var t=this.simultaneous;return e=X(e,this),t[e.id]||(t[e.id]=e,e.recognizeWith(this)),this},dropRecognizeWith:function(e){return o(e,"dropRecognizeWith",this)?this:(e=X(e,this),delete this.simultaneous[e.id],this)},requireFailure:function(e){if(o(e,"requireFailure",this))return this;var t=this.requireFail;return e=X(e,this),-1===b(t,e)&&(t.push(e),e.requireFailure(this)),this},dropRequireFailure:function(e){if(o(e,"dropRequireFailure",this))return this;e=X(e,this);var t=b(this.requireFail,e);return t>-1&&this.requireFail.splice(t,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(e){return!!this.simultaneous[e.id]},emit:function(e){function t(t){n.manager.emit(n.options.event+(t?G(i):""),e)}var n=this,i=this.state;ln>i&&t(!0),t(),i>=ln&&t(!0)},tryEmit:function(e){return this.canEmit()?this.emit(e):(this.state=un,void 0)},canEmit:function(){for(var e=0;e<this.requireFail.length;){if(!(this.requireFail[e].state&(un|on)))return!1;e++}return!0},recognize:function(e){var t=s({},e);return u(this.options.enable,[this,t])?(this.state&(cn|dn|un)&&(this.state=on),this.state=this.process(t),this.state&(rn|sn|ln|dn)&&this.tryEmit(t),void 0):(this.reset(),this.state=un,void 0)},process:function(){},getTouchAction:function(){},reset:function(){}},c(Z,Y,{defaults:{pointers:1},attrTest:function(e){var t=this.options.pointers;return 0===t||e.pointers.length===t},process:function(e){var t=this.state,n=e.eventType,i=t&(rn|sn),a=this.attrTest(e);return i&&(n&At||!a)?t|dn:i||a?n&Et?t|ln:t&rn?t|sn:rn:un}}),c(Q,Z,{defaults:{event:"pan",threshold:10,pointers:1,direction:Dt},getTouchAction:function(){var e=this.options.direction,t=[];return e&Mt&&t.push(an),e&Rt&&t.push(nn),t},directionTest:function(e){var t=this.options,n=!0,i=e.distance,a=e.direction,o=e.deltaX,r=e.deltaY;return a&t.direction||(t.direction&Mt?(a=0===o?kt:0>o?Nt:Pt,n=o!=this.pX,i=Math.abs(e.deltaX)):(a=0===r?kt:0>r?Bt:It,n=r!=this.pY,i=Math.abs(e.deltaY))),e.direction=a,n&&i>t.threshold&&a&t.direction},attrTest:function(e){return Z.prototype.attrTest.call(this,e)&&(this.state&rn||!(this.state&rn)&&this.directionTest(e))},emit:function(e){this.pX=e.deltaX,this.pY=e.deltaY;var t=K(e.direction);t&&this.manager.emit(this.options.event+t,e),this._super.emit.call(this,e)}}),c(J,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[tn]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.scale-1)>this.options.threshold||this.state&rn)},emit:function(e){if(this._super.emit.call(this,e),1!==e.scale){var t=e.scale<1?"in":"out";this.manager.emit(this.options.event+t,e)}}}),c(et,Y,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[Jt]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,i=e.distance<t.threshold,o=e.deltaTime>t.time;if(this._input=e,!i||!n||e.eventType&(Et|At)&&!o)this.reset();else if(e.eventType&Ct)this.reset(),this._timer=a(function(){this.state=cn,this.tryEmit()},t.time,this);else if(e.eventType&Et)return cn;return un},reset:function(){clearTimeout(this._timer)},emit:function(e){this.state===cn&&(e&&e.eventType&Et?this.manager.emit(this.options.event+"up",e):(this._input.timeStamp=pt(),this.manager.emit(this.options.event,this._input)))}}),c(tt,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[tn]},attrTest:function(e){return this._super.attrTest.call(this,e)&&(Math.abs(e.rotation)>this.options.threshold||this.state&rn)}}),c(nt,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Mt|Rt,pointers:1},getTouchAction:function(){return Q.prototype.getTouchAction.call(this)},attrTest:function(e){var t,n=this.options.direction;return n&(Mt|Rt)?t=e.velocity:n&Mt?t=e.velocityX:n&Rt&&(t=e.velocityY),this._super.attrTest.call(this,e)&&n&e.direction&&e.distance>this.options.threshold&&mt(t)>this.options.velocity&&e.eventType&Et},emit:function(e){var t=K(e.direction);t&&this.manager.emit(this.options.event+t,e),this.manager.emit(this.options.event,e)}}),c(it,Y,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[en]},process:function(e){var t=this.options,n=e.pointers.length===t.pointers,i=e.distance<t.threshold,o=e.deltaTime<t.time;if(this.reset(),e.eventType&Ct&&0===this.count)return this.failTimeout();if(i&&o&&n){if(e.eventType!=Et)return this.failTimeout();var r=this.pTime?e.timeStamp-this.pTime<t.interval:!0,s=!this.pCenter||R(this.pCenter,e.center)<t.posThreshold;this.pTime=e.timeStamp,this.pCenter=e.center,s&&r?this.count+=1:this.count=1,this._input=e;var l=this.count%t.taps;if(0===l)return this.hasRequireFailures()?(this._timer=a(function(){this.state=cn,this.tryEmit()},t.interval,this),rn):cn}return un},failTimeout:function(){return this._timer=a(function(){this.state=un},this.options.interval,this),un},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==cn&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),at.VERSION="2.0.4",at.defaults={domEvents:!1,touchAction:Qt,enable:!0,inputTarget:null,inputClass:null,preset:[[tt,{enable:!1}],[J,{enable:!1},["rotate"]],[nt,{direction:Mt}],[Q,{direction:Mt},["swipe"]],[it],[it,{event:"doubletap",taps:2},["tap"]],[et]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};var mn=1,pn=2;ot.prototype={set:function(e){return s(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this},stop:function(e){this.session.stopped=e?pn:mn},recognize:function(e){var t=this.session;if(!t.stopped){this.touchAction.preventDefaults(e);var n,i=this.recognizers,a=t.curRecognizer;(!a||a&&a.state&cn)&&(a=t.curRecognizer=null);for(var o=0;o<i.length;)n=i[o],t.stopped===pn||a&&n!=a&&!n.canRecognizeWith(a)?n.reset():n.recognize(e),!a&&n.state&(rn|sn|ln)&&(a=t.curRecognizer=n),o++}},get:function(e){if(e instanceof Y)return e;for(var t=this.recognizers,n=0;n<t.length;n++)if(t[n].options.event==e)return t[n];return null},add:function(e){if(o(e,"add",this))return this;var t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e},remove:function(e){if(o(e,"remove",this))return this;var t=this.recognizers;return e=this.get(e),t.splice(b(t,e),1),this.touchAction.update(),this},on:function(e,t){var n=this.handlers;return r(g(e),function(e){n[e]=n[e]||[],n[e].push(t)}),this},off:function(e,t){var n=this.handlers;return r(g(e),function(e){t?n[e].splice(b(n[e],t),1):delete n[e]}),this},emit:function(e,t){this.options.domEvents&&st(e,t);var n=this.handlers[e]&&this.handlers[e].slice();if(n&&n.length){t.type=e,t.preventDefault=function(){t.srcEvent.preventDefault()};for(var i=0;i<n.length;)n[i](t),i++}},destroy:function(){this.element&&rt(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},s(at,{INPUT_START:Ct,INPUT_MOVE:St,INPUT_END:Et,INPUT_CANCEL:At,STATE_POSSIBLE:on,STATE_BEGAN:rn,STATE_CHANGED:sn,STATE_ENDED:ln,STATE_RECOGNIZED:cn,STATE_CANCELLED:dn,STATE_FAILED:un,DIRECTION_NONE:kt,DIRECTION_LEFT:Nt,DIRECTION_RIGHT:Pt,DIRECTION_UP:Bt,DIRECTION_DOWN:It,DIRECTION_HORIZONTAL:Mt,DIRECTION_VERTICAL:Rt,DIRECTION_ALL:Dt,Manager:ot,Input:C,TouchAction:V,TouchInput:z,MouseInput:j,PointerEventInput:_,TouchMouseInput:q,SingleTouchInput:F,Recognizer:Y,AttrRecognizer:Z,Tap:it,Pan:Q,Swipe:nt,Pinch:J,Rotate:tt,Press:et,on:p,off:h,each:r,merge:l,extend:s,inherit:c,bindFn:d,prefixed:w}),typeof define==dt&&define.amd?define(function(){return at}):"undefined"!=typeof module&&module.exports?module.exports=at:e[n]=at}(window,document,"Hammer"),function(){angular.module("ngMaterial",["ng","ngAnimate","ngAria","material.core","material.animations","material.components.backdrop","material.components.bottomSheet","material.components.button","material.components.card","material.components.checkbox","material.components.content","material.components.dialog","material.components.divider","material.components.icon","material.components.list","material.components.progressCircular","material.components.progressLinear","material.components.radioButton","material.components.sidenav","material.components.slider","material.components.sticky","material.components.subheader","material.components.swipe","material.components.switch","material.components.tabs","material.components.textField","material.components.toast","material.components.toolbar","material.components.tooltip","material.components.whiteframe","material.services.aria","material.services.attrBind","material.services.compiler","material.services.interimElement","material.services.media","material.services.registry","material.services.theming"])}(),function(){angular.module("material.core",[]).run(function(){if("undefined"==typeof Hammer)throw new Error("ngMaterial requires HammerJS to be preloaded.")}).config(["$provide",function(e){function t(e){return e.debounce=function(t){var n,i,a,o;return function(){n=arguments,o=this,a=t,i||(i=!0,e(function(){a.apply(o,n),i=!1}))}},e}e.decorator("$$rAF",["$delegate","$rootScope",t])}])}(),function(){angular.module("material.core").constant("$mdConstant",{KEY_CODE:{ENTER:13,ESCAPE:27,SPACE:32,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40}})}(),function(){var e=["0","0","0"];angular.module("material.core").factory("$mdUtil",["$cacheFactory",function(t){function n(e,t){function n(){return[].concat(b)}function i(){return b.length}function a(e){return b.length&&e>-1&&e<b.length}function o(e){return e?a(u(e)+1):!1}function r(e){return e?a(u(e)-1):!1}function s(e){return a(e)?b[e]:null}function l(e,t){return b.filter(function(n){return n[e]===t})}function c(e,t){return e?(angular.isNumber(t)||(t=b.length),b.splice(t,0,e),u(e)):-1}function d(e){m(e)&&b.splice(u(e),1)}function u(e){return b.indexOf(e)}function m(e){return e&&u(e)>-1}function p(e,n){if(n=n||g,m(e)){var i=u(e)+1,o=a(i)?b[i]:t?f():null;return n(o)?o:p(o,n)}return null}function h(e,n){if(n=n||g,m(e)){var i=u(e)-1,o=a(i)?b[i]:t?v():null;return n(o)?o:h(o,n)}return null}function f(){return b.length?b[0]:null}function v(){return b.length?b[b.length-1]:null}var g=function(){return!0};t=!!t;var b=e||[];return{items:n,count:i,inRange:a,contains:m,indexOf:u,itemAt:s,findBy:l,add:c,remove:d,first:f,last:v,next:p,previous:h,hasPrevious:r,hasNext:o}}function i(e,n){var i=t(e,n),a={};return i._put=i.put,i.put=function(e,t){return a[e]=!0,i._put(e,t)},i._remove=i.remove,i.remove=function(e){return delete a[e],i._remove(e)},i.keys=function(){return Object.keys(a)},i}var a,o=/([\:\-\_]+(.))/g;return a={now:window.performance?angular.bind(window.performance,window.performance.now):Date.now,ancestorHasAttribute:function(e,t,n){n=n||4;for(var i=e;n--&&i.length;){if(i[0].hasAttribute&&i[0].hasAttribute(t))return!0;i=i.parent()}return!1},isParentDisabled:function(e,t){return a.ancestorHasAttribute(e,"disabled",t)},elementIsSibling:function(e,t){return e.parent().length&&e.parent()[0]===t.parent()[0]},camelCase:function(e){return e.replace(o,function(e,t,n,i){return i?n.toUpperCase():n})},stringFromTextBody:function(e,t){var n=e.trim();return n.split(/\s+/).length>t&&(n=e.split(/\s+/).slice(1,t+1).join(" ")+"..."),n},iterator:n,cacheFactory:i,debounce:function(e,t,n){var i;return function(){var a=this,o=arguments;clearTimeout(i),i=setTimeout(function(){i=null,n||e.apply(a,o)},t),n&&!i&&e.apply(a,o)}},throttle:function(e,t){var n;return function(){var i=this,o=arguments,r=a.now();(!n||n-r>t)&&(e.apply(i,o),n=r)}},wrap:function(e,t,n){e.hasOwnProperty(0)&&(e=e[0]);var i=document.createElement(t);return i.className+=n,i.appendChild(e.parentNode.replaceChild(i,e)),angular.element(i)},nextUid:function(){for(var t,n=e.length;n;){if(n--,t=e[n].charCodeAt(0),57==t)return e[n]="A",e.join("");if(90!=t)return e[n]=String.fromCharCode(t+1),e.join("");e[n]="0"}return e.unshift("0"),e.join("")},disconnectScope:function(e){if(e&&e.$root!==e&&!e.$$destroyed){var t=e.$parent;e.$$disconnected=!0,t.$$childHead===e&&(t.$$childHead=e.$$nextSibling),t.$$childTail===e&&(t.$$childTail=e.$$prevSibling),e.$$prevSibling&&(e.$$prevSibling.$$nextSibling=e.$$nextSibling),e.$$nextSibling&&(e.$$nextSibling.$$prevSibling=e.$$prevSibling),e.$$nextSibling=e.$$prevSibling=null}},reconnectScope:function(e){if(e&&e.$root!==e&&e.$$disconnected){var t=e,n=t.$parent;t.$$disconnected=!1,t.$$prevSibling=n.$$childTail,n.$$childHead?(n.$$childTail.$$nextSibling=t,n.$$childTail=t):n.$$childHead=n.$$childTail=t}}}}]),angular.element.prototype.focus=angular.element.prototype.focus||function(){return this.length&&this[0].focus(),this},angular.element.prototype.blur=angular.element.prototype.blur||function(){return this.length&&this[0].blur(),this}}(),function(){function e(e,t,n,i){function a(e){return l?"webkit"+e.charAt(0).toUpperCase()+e.substring(1):e}function o(e,n,a){function o(t){t.target===e[0]&&(e.off(s.TRANSITIONEND_EVENT,o),l.resolve())}var l=i.defer();n.append(e);var c;if(a){var d=a[0].getBoundingClientRect();c=r(d.left-e[0].offsetWidth,d.top-e[0].offsetHeight,0)+" scale(0.2)"}else c="translate3d(0,100%,0) scale(0.5)";return e.css(s.TRANSFORM,c).css("opacity",0),t(function(){t(function(){e.addClass("md-active").css(s.TRANSFORM,"").css("opacity","").on(s.TRANSITIONEND_EVENT,o)})}),l.promise}function r(e,t,n){return"translate3d("+Math.floor(e)+"px,"+Math.floor(t)+"px,"+Math.floor(n)+"px)"}var s,l=/webkit/i.test(n.vendorPrefix);return s={popIn:o,TRANSITIONEND_EVENT:"transitionend"+(l?" webkitTransitionEnd":""),ANIMATIONEND_EVENT:"animationend"+(l?" webkitAnimationEnd":""),TRANSFORM:a("transform"),TRANSITION:a("transition"),TRANSITION_DURATION:a("transitionDuration"),ANIMATION_PLAY_STATE:a("animationPlayState"),ANIMATION_DURATION:a("animationDuration"),ANIMATION_NAME:a("animationName"),ANIMATION_TIMING:a("animationTimingFunction"),ANIMATION_DIRECTION:a("animationDirection")}}angular.module("material.animations",["material.core"]).service("$mdEffects",["$rootElement","$$rAF","$sniffer","$q",e])}(),function(){function e(e){return function(t,n,i){"checkbox"==i.inkRipple?e.attachCheckboxBehavior(n):e.attachButtonBehavior(n)}}function t(e,t,n,i){function a(e){return r(e,{mousedown:!0,center:!1,animationDuration:350,mousedownPauseTime:175,animationName:"inkRippleButton",animationTimingFunction:"linear"})}function o(e){return r(e,{mousedown:!0,center:!0,animationDuration:300,mousedownPauseTime:180,animationName:"inkRippleCheckbox",animationTimingFunction:"linear"})}function r(t,a){function o(){return!t[0].hasAttribute("disabled")}function r(i,o,r){var s=angular.element('<div class="md-ripple">').css(n.ANIMATION_DURATION,a.animationDuration+"ms").css(n.ANIMATION_NAME,a.animationName).css(n.ANIMATION_TIMING,a.animationTimingFunction).on(n.ANIMATIONEND_EVENT,function(){s.remove()});c||(c=angular.element('<div class="md-ripple-container">'),t.append(c)),c.append(s);var u=c.prop("offsetWidth");if(a.center)i=u/2,o=c.prop("offsetHeight")/2;else if(r){var m=d.getBoundingClientRect();i-=m.left,o-=m.top}l&&(o+=l.$element.prop("scrollTop"));var p={"background-color":e.getComputedStyle(s[0]).color||e.getComputedStyle(d).color,"border-radius":u/2+"px",left:i-u/2+"px",width:u+"px",top:o-u/2+"px",height:u+"px"};return p[n.ANIMATION_DURATION]=a.fadeoutDuration+"ms",s.css(p),s}function s(e){e.eventType===Hammer.INPUT_START&&e.isFirst&&o()?(p=r(e.center.x,e.center.y,!0),m=i(function(){p&&p.css(n.ANIMATION_PLAY_STATE,"paused")},a.mousedownPauseTime,!1),p.on("$destroy",function(){p=null})):e.eventType===Hammer.INPUT_END&&e.isFinal&&(i.cancel(m),p&&p.css(n.ANIMATION_PLAY_STATE,""))}if(t.controller("noink"))return angular.noop;var l=t.controller("mdContent");a=angular.extend({mousedown:!0,hover:!0,focus:!0,center:!1,animationDuration:300,mousedownPauseTime:150,animationName:"",animationTimingFunction:"linear"},a||{});var c,d=t[0],u=new Hammer(d);return a.mousedown&&u.on("hammer.input",s),function(){u.destroy(),c&&c.remove()};var m,p}return{attachButtonBehavior:a,attachCheckboxBehavior:o,attach:r}}angular.module("material.animations").directive("inkRipple",["$mdInkRipple",e]).factory("$mdInkRipple",["$window","$$rAF","$mdEffects","$timeout","$mdUtil",t])}(),function(){function e(){return function(){return{controller:angular.noop}}}angular.module("material.animations").directive({noink:e(),nobar:e(),nostretch:e()})}(),function(){function e(e){return e}angular.module("material.components.backdrop",["material.services.theming"]).directive("mdBackdrop",["$mdTheming",e])}(),function(){function e(){return{restrict:"E"}}function t(e,t,n,i,a,o,r){function s(e,n,a){d=o('<md-backdrop class="md-opaque ng-enter">')(e),d.on("click touchstart",function(){i(u.cancel)}),r.inherit(d,a.parent),t.enter(d,a.parent,null);var s=new c(n);return a.bottomSheet=s,a.targetEvent&&angular.element(a.targetEvent.target).blur(),r.inherit(s.element,a.parent),t.enter(s.element,a.parent)}function l(e,n,i){var a=i.bottomSheet;return t.leave(d),t.leave(a.element).then(function(){a.cleanup(),i.targetEvent&&angular.element(i.targetEvent.target).focus()})}function c(e){function t(t){t.preventDefault(),h=t.target,c=r(t),p=e.css(n.TRANSITION_DURATION),e.css(n.TRANSITION_DURATION,"0s")}function a(t){e.css(n.TRANSITION_DURATION,p);var a=r(t);Math.abs(a-c)<5&&t.target==h?angular.element(t.target).triggerHandler("click"):m>g?i(u.cancel):s(void 0)}function o(e){var t=r(e),n=t-c;m=t-d,d=t,n=l(n),s(n+f)}function r(e){var t=e.touches&&e.touches.length?e.touches[0]:e.changedTouches[0];return t.clientY}function s(t){null===t||void 0===t?e.css(n.TRANSFORM,""):e.css(n.TRANSFORM,"translate3d(0, "+t+"px, 0)")}function l(e){if(0>e&&-f+v>e){e=-e;var t=f-v;e=Math.max(-f,-Math.min(f-5,t+v*(e-t)/f)-e/50)}return e}var c,d,m,p,h,f=80,v=20,g=10;return e=e.eq(0),e.on("touchstart",t),e.on("touchmove",o),e.on("touchend",a),{element:e,cleanup:function(){e.off("touchstart",t),e.off("touchmove",o),e.off("touchend",a)}}}var d,u;return u=e({themable:!0,targetEvent:null,onShow:s,onRemove:l})}angular.module("material.components.bottomSheet",["material.components.backdrop","material.services.interimElement","material.services.theming"]).directive("mdBottomSheet",[e]).factory("$mdBottomSheet",["$$interimElement","$animate","$mdEffects","$timeout","$$rAF","$compile","$mdTheming",t])}(),function(){function e(e,t,n){function i(e){return angular.isDefined(e.href)||angular.isDefined(e.ngHref)}function a(e,t){var n=i(t)?"a":"button",a=e[0].hasAttribute("disabled")?" disabled ":" ";return"<"+n+a+'class="md-button" ng-transclude></'+n+">"}function o(a,o,r){var s=o[0];t(o),e.attachButtonBehavior(o);var l=s.textContent.trim();l||n.expect(o,"aria-label"),i(r)&&a.$watch(function(){return s.hasAttribute("disabled")},function(e){o.attr("tabindex",e?-1:0)})}return{restrict:"E",replace:!0,transclude:!0,template:a,link:o}}angular.module("material.components.button",["material.core","material.animations","material.services.aria","material.services.theming"]).directive("mdButton",["$mdInkRipple","$mdTheming","$mdAria",e])}(),function(){function e(){return{restrict:"E",link:function(){}}}angular.module("material.components.card",[]).directive("mdCard",[e])}(),function(){function e(e,t,n,i,a){function o(e,t){return t.type="checkbox",t.tabIndex=0,e.attr("role",t.type),function(t,o,l,c){function d(e){e.which===i.KEY_CODE.SPACE&&(e.preventDefault(),u(e))}function u(e){o[0].hasAttribute("disabled")||t.$apply(function(){p=!p,c.$setViewValue(p,e&&e.type),c.$render()})}function m(){p=c.$viewValue,p?o.addClass(s):o.removeClass(s)}var p=!1;a(o),c=c||{$setViewValue:function(e){this.$viewValue=e},$parsers:[],$formatters:[]},n.expectWithText(e,"aria-label"),r.link.pre(t,{on:angular.noop,0:{}},l,[c]),o.on("click",u),o.on("keypress",d),c.$render=m}}var r=e[0],s="md-checked";return{restrict:"E",transclude:!0,require:"?ngModel",template:'<div class="md-container" ink-ripple="checkbox"><div class="md-icon"></div></div><div ng-transclude class="md-label"></div>',compile:o}
}angular.module("material.components.checkbox",["material.core","material.animations","material.services.theming","material.services.aria"]).directive("mdCheckbox",["inputDirective","$mdInkRipple","$mdAria","$mdConstant","$mdTheming",e])}(),function(){function e(e){function t(e,t){this.$scope=e,this.$element=t}return{restrict:"E",controller:["$scope","$element",t],link:function(t,n){e(n),t.$broadcast("$mdContentLoaded",n)}}}angular.module("material.components.content",["material.services.theming","material.services.registry"]).directive("mdContent",["$mdTheming",e])}(),function(){function e(e,t){return{restrict:"E",link:function(n,i){t(i),e(function(){var e=i[0].querySelector("md-content");e&&e.scrollHeight>e.clientHeight&&i.addClass("md-content-overflow")})}}}function t(e,t,n,i,a,o,r,s,l,c){function d(o,r,s){function d(){var e=r[0].querySelector(".dialog-close");if(!e){var t=r[0].querySelectorAll(".md-actions button");e=t[t.length-1]}return angular.element(e)}s.parent=angular.element(s.parent),s.popInTarget=angular.element((s.targetEvent||{}).target);var u=d();return m(r.find("md-dialog")),s.hasBackdrop&&(s.backdrop=n('<md-backdrop class="md-opaque ng-enter">')(o),c.inherit(s.backdrop,s.parent),a.enter(s.backdrop,s.parent,null)),i.popIn(r,s.parent,s.popInTarget.length&&s.popInTarget).then(function(){s.escapeToClose&&(s.rootElementKeyupCallback=function(t){t.keyCode===l.KEY_CODE.ESCAPE&&e(p.cancel)},t.on("keyup",s.rootElementKeyupCallback)),s.clickOutsideToClose&&(s.dialogClickOutsideCallback=function(t){t.target===r[0]&&e(p.cancel)},r.on("click",s.dialogClickOutsideCallback)),u.focus()})}function u(e,n,i){return i.backdrop&&(a.leave(i.backdrop),n.data("backdrop",void 0)),i.escapeToClose&&t.off("keyup",i.rootElementKeyupCallback),i.clickOutsideToClose&&n.off("click",i.dialogClickOutsideCallback),a.leave(n).then(function(){n.remove(),i.popInTarget&&i.popInTarget.focus()})}function m(e){e.attr({role:"dialog"});var t=e.find("md-content");0===t.length&&(t=e),o.expectAsync(e,"aria-label",function(){return s.stringFromTextBody(t.text(),3)})}var p;return p=r({hasBackdrop:!0,isolateScope:!0,onShow:d,onRemove:u,clickOutsideToClose:!0,escapeToClose:!0,targetEvent:null,transformTemplate:function(e){return'<div class="md-dialog-container">'+e+"</div>"}})}angular.module("material.components.dialog",["material.core","material.animations","material.components.backdrop","material.services.compiler","material.services.aria","material.services.interimElement","material.services.theming"]).directive("mdDialog",["$$rAF","$mdTheming",e]).factory("$mdDialog",["$timeout","$rootElement","$compile","$mdEffects","$animate","$mdAria","$$interimElement","$mdUtil","$mdConstant","$mdTheming",t])}(),function(){function e(){}function t(t){return{restrict:"E",link:t,controller:[e]}}angular.module("material.components.divider",["material.animations","material.services.aria","material.services.theming"]).directive("mdDivider",["$mdTheming",t])}(),function(){function e(){return{restrict:"E",template:'<object class="md-icon"></object>',compile:function(e,t){var n=angular.element(e[0].children[0]);angular.isDefined(t.icon)&&n.attr("data",t.icon)}}}angular.module("material.components.icon",[]).directive("mdIcon",[e])}(),function(){function e(){return{restrict:"E",link:function(e,t){t.attr({role:"list"})}}}function t(){return{restrict:"E",link:function(e,t){t.attr({role:"listitem"})}}}angular.module("material.components.list",[]).directive("mdList",[e]).directive("mdItem",[t])}(),function(){function e(e,t,n){function i(e){return e.attr("aria-valuemin",0),e.attr("aria-valuemax",100),e.attr("role","progressbar"),a}function a(e,i,a){n(i);var l,c,d,u,m=i[0],p=m.querySelectorAll(".md-fill, .md-mask.md-full"),h=m.querySelectorAll(".md-fill.md-fix"),f=a.diameter||48,v=f/48;m.style[t.TRANSFORM]="scale("+v.toString()+")",a.$observe("value",function(e){for(c=o(e),d=r[c],u=s[c],i.attr("aria-valuenow",c),l=0;l<p.length;l++)p[l].style[t.TRANSFORM]=d;for(l=0;l<h.length;l++)h[l].style[t.TRANSFORM]=u})}function o(e){return e>100?100:0>e?0:Math.ceil(e||0)}for(var r=new Array(101),s=new Array(101),l=0;101>l;l++){var c=l/100,d=Math.floor(180*c);r[l]="rotate("+d.toString()+"deg)",s[l]="rotate("+(2*d).toString()+"deg)"}return{restrict:"E",template:'<div class="md-wrapper1"><div class="md-wrapper2"><div class="md-circle"><div class="md-mask md-full"><div class="md-fill"></div></div><div class="md-mask md-half"><div class="md-fill"></div><div class="md-fill md-fix"></div></div><div class="md-shadow"></div></div><div class="md-inset"></div></div></div>',compile:i}}angular.module("material.components.progressCircular",["material.animations","material.services.aria","material.services.theming"]).directive("mdProgressCircular",["$$rAF","$mdEffects","$mdTheming",e])}(),function(){function e(e,n,i){function a(e){return e.attr("aria-valuemin",0),e.attr("aria-valuemax",100),e.attr("role","progressbar"),o}function o(a,o,s){i(o);var l=o[0].querySelector(".md-bar1").style,c=o[0].querySelector(".md-bar2").style,d=angular.element(o[0].querySelector(".md-container"));s.$observe("value",function(e){if("query"!=s.mode){var i=r(e);o.attr("aria-valuenow",i),c[n.TRANSFORM]=t[i]}}),s.$observe("secondaryvalue",function(e){l[n.TRANSFORM]=t[r(e)]}),e(function(){d.addClass("md-ready")})}function r(e){return e>100?100:0>e?0:Math.ceil(e||0)}return{restrict:"E",template:'<div class="md-container"><div class="md-dashed"></div><div class="md-bar md-bar1"></div><div class="md-bar md-bar2"></div></div>',compile:a}}angular.module("material.components.progressLinear",["material.animations","material.services.theming","material.services.aria"]).directive("mdProgressLinear",["$$rAF","$mdEffects","$mdTheming",e]);var t=function(){function e(e){var t=e/100,n=(e-100)/2;return"translateX("+n.toString()+"%) scale("+t.toString()+", 1)"}for(var t=new Array(101),n=0;101>n;n++)t[n]=e(n);return t}()}(),function(){function e(e,t,n){function i(e,i,a,o){function r(e){e.keyCode===t.KEY_CODE.LEFT_ARROW||e.keyCode===t.KEY_CODE.UP_ARROW?(e.preventDefault(),s.selectPrevious()):(e.keyCode===t.KEY_CODE.RIGHT_ARROW||e.keyCode===t.KEY_CODE.DOWN_ARROW)&&(e.preventDefault(),s.selectNext())}n(i);var s=o[0],l=o[1]||{$setViewValue:angular.noop};s.init(l),i.attr({role:"radiogroup",tabIndex:"0"}).on("keydown",r)}function a(e){this._radioButtonRenderFns=[],this.$element=e}function o(){return{init:function(e){this._ngModelCtrl=e,this._ngModelCtrl.$render=angular.bind(this,this.render)},add:function(e){this._radioButtonRenderFns.push(e)},remove:function(e){var t=this._radioButtonRenderFns.indexOf(e);-1!==t&&this._radioButtonRenderFns.splice(t,1)},render:function(){this._radioButtonRenderFns.forEach(function(e){e()})},setViewValue:function(e,t){this._ngModelCtrl.$setViewValue(e,t),this.render()},getViewValue:function(){return this._ngModelCtrl.$viewValue},selectNext:function(){return r(this.$element,1)},selectPrevious:function(){return r(this.$element,-1)},setActiveDescendant:function(e){this.$element.attr("aria-activedescendant",e)}}}function r(t,n){var i=e.iterator(Array.prototype.slice.call(t[0].querySelectorAll("md-radio-button")),!0);if(i.count()){var a=t[0].querySelector("md-radio-button.md-checked"),o=i[0>n?"previous":"next"](a)||i.first();angular.element(o).triggerHandler("click")}}return a.prototype=o(),{restrict:"E",controller:["$element",a],require:["mdRadioGroup","?ngModel"],link:i}}function t(e,t,n){function i(i,o,r,s){function l(e){o[0].hasAttribute("disabled")||i.$apply(function(){s.setViewValue(r.value,e&&e.type)})}function c(){var e=s.getViewValue()===r.value;e!==u&&(u=e,o.attr("aria-checked",e),e?(o.addClass(a),s.setActiveDescendant(o.attr("id"))):o.removeClass(a))}function d(n,i){function a(){return r.id||"radio_"+t.nextUid()}i.ariaId=a(),n.attr({id:i.ariaId,role:"radio","aria-checked":"false"}),e.expectWithText(n,"aria-label")}var u;n(o),d(o,i),s.add(c),r.$observe("value",c),o.on("click",l).on("$destroy",function(){s.remove(c)})}var a="md-checked";return{restrict:"E",require:"^mdRadioGroup",transclude:!0,template:'<div class="md-container" ink-ripple="checkbox"><div class="md-off"></div><div class="md-on"></div></div><div ng-transclude class="md-label"></div>',link:i}}angular.module("material.components.radioButton",["material.core","material.animations","material.services.aria","material.services.theming"]).directive("mdRadioGroup",["$mdUtil","$mdConstant","$mdTheming",e]).directive("mdRadioButton",["$mdAria","$mdUtil","$mdTheming",t])}(),function(){function e(e,t,n,i,a,o){this.destroy=o.register(this,n.componentId),this.isOpen=function(){return!!e.isOpen},this.toggle=function(){e.isOpen=!e.isOpen},this.open=function(){e.isOpen=!0},this.close=function(){e.isOpen=!1}}function t(e){return function(t){var n=e.get(t);return n||e.notFoundError(t),{isOpen:function(){return n&&n.isOpen()},toggle:function(){n&&n.toggle()},open:function(){n&&n.open()},close:function(){n&&n.close()}}}}function n(e,t,n,i,a,o,r){function s(s,l,c,d){function u(e){var n=l.parent();n[e?"on":"off"]("keydown",m),t[e?"enter":"leave"](f,n),f[e?"on":"off"]("click",p),t[e?"removeClass":"addClass"](l,"md-closed").then(function(){s.isOpen&&l.focus()})}function m(e){e.keyCode===a.KEY_CODE.ESCAPE&&(p(),e.preventDefault(),e.stopPropagation())}function p(){e(function(){d.close()})}var h=n(c.isLockedOpen),f=o('<md-backdrop class="md-sidenav-backdrop md-opaque">')(s);r.inherit(f,l),l.on("$destroy",d.destroy),s.$watch("isOpen",u),s.$watch(function(){return h(s.$parent,{$media:i})},function(e){l.toggleClass("md-locked-open",!!e),f.toggleClass("md-locked-open",!!e)})}return{restrict:"E",scope:{isOpen:"=?"},controller:"$mdSidenavController",compile:function(e){return e.addClass("md-closed"),e.attr("tabIndex","-1"),s}}}angular.module("material.components.sidenav",["material.core","material.services.registry","material.services.media","material.components.backdrop","material.services.theming","material.animations"]).factory("$mdSidenav",["$mdComponentRegistry",t]).directive("mdSidenav",["$timeout","$animate","$parse","$mdMedia","$mdConstant","$compile","$mdTheming",n]).controller("$mdSidenavController",["$scope","$element","$attrs","$timeout","$mdSidenav","$mdComponentRegistry",e])}(),function(){function e(e){function n(t,n,i,a){e(n);var o=a[0]||{$setViewValue:function(e){this.$viewValue=e,this.$viewChangeListeners.forEach(function(e){e()})},$parsers:[],$formatters:[],$viewChangeListeners:[]},r=a[1];r.init(o)}return{scope:{},require:["?ngModel","mdSlider"],controller:["$scope","$element","$attrs","$$rAF","$window","$mdEffects","$mdAria","$mdUtil","$mdConstant",t],template:'<div class="md-track-container"><div class="md-track"></div><div class="md-track md-track-fill"></div><div class="md-track-ticks"></div></div><div class="md-thumb-container"><div class="md-thumb"></div><div class="md-focus-thumb"></div><div class="md-focus-ring"></div><div class="md-sign"><span class="md-thumb-text" ng-bind="modelValue"></span></div><div class="md-disabled-thumb"></div></div>',link:n}}function t(e,t,n,i,a,o,r,s,l){this.init=function(c){function d(){v(),$(),f()}function u(e){z=parseFloat(e),t.attr("aria-valuemin",e)}function m(e){H=parseFloat(e),t.attr("aria-valuemax",e)}function p(e){q=parseFloat(e),f()}function h(e){t.attr("aria-disabled",!!e)}function f(){if(angular.isDefined(n.discrete)){var e=Math.floor((H-z)/q);V||(V=angular.element('<canvas style="position:absolute;">'),W=V[0].getContext("2d"),W.fillStyle="black",O.append(V));var t=g();V[0].width=t.width,V[0].height=t.height;for(var i,a=0;e>=a;a++)i=Math.floor(t.width*(a/e)),W.fillRect(i-1,0,2,t.height)}}function v(){Y=D[0].getBoundingClientRect()}function g(){return j(),Y}function b(n){if(!t[0].hasAttribute("disabled")){var i;n.keyCode===l.KEY_CODE.LEFT_ARROW?i=-q:n.keyCode===l.KEY_CODE.RIGHT_ARROW&&(i=q),i&&((n.metaKey||n.ctrlKey||n.altKey)&&(i*=4),n.preventDefault(),n.stopPropagation(),e.$evalAsync(function(){y(c.$viewValue+i)}))}}function y(e){c.$setViewValue(w(T(e)))}function $(){isNaN(c.$viewValue)&&(c.$viewValue=c.$modelValue);var n=(c.$viewValue-z)/(H-z);e.modelValue=c.$viewValue,t.attr("aria-valuenow",c.$viewValue),x(n)}function w(e){return angular.isNumber(e)?Math.max(z,Math.min(H,e)):void 0}function T(e){return angular.isNumber(e)?Math.round(e/q)*q:void 0}function x(e){U.css("width",100*e+"%"),R.css(o.TRANSFORM,"translate3d("+g().width*e+"px,0,0)"),t.toggleClass("md-min",0===e)}function C(e){G||e.eventType!==Hammer.INPUT_START||t[0].hasAttribute("disabled")?G&&e.eventType===Hammer.INPUT_END&&(G&&K&&A(e),G=!1,t.removeClass("panning active")):(G=!0,t.addClass("active"),t[0].focus(),v(),E(e),e.srcEvent.stopPropagation())}function S(){G&&t.addClass("panning")}function E(e){G&&(K?N(e.center.x):k(e.center.x),e.preventDefault(),e.srcEvent.stopPropagation())}function A(e){if(K&&!t[0].hasAttribute("disabled")){var n=B(P(e.center.x)),a=w(T(n));x(I(a)),i(function(){y(a)}),e.preventDefault(),e.srcEvent.stopPropagation()}}function k(t){e.$evalAsync(function(){y(B(P(t)))})}function N(e){x(P(e))}function P(e){return Math.max(0,Math.min(1,(e-Y.left)/Y.width))}function B(e){return z+e*(H-z)}function I(e){return(e-z)/(H-z)}var M=angular.element(t[0].querySelector(".md-thumb")),R=M.parent(),D=angular.element(t[0].querySelector(".md-track-container")),U=angular.element(t[0].querySelector(".md-track-fill")),O=angular.element(t[0].querySelector(".md-track-ticks")),j=s.throttle(v,5e3);n.min?n.$observe("min",u):u(0),n.max?n.$observe("max",m):m(100),n.step?n.$observe("step",p):p(1);var _=angular.noop;n.ngDisabled?_=e.$parent.$watch(n.ngDisabled,h):h(!!n.disabled),r.expect(t,"aria-label"),t.attr("tabIndex",0),t.attr("role","slider"),t.on("keydown",b);var F=new Hammer(t[0],{recognizers:[[Hammer.Pan,{direction:Hammer.DIRECTION_HORIZONTAL}]]});F.on("hammer.input",C),F.on("panstart",S),F.on("pan",E),F.on("panend",A),setTimeout(d);var L=i.debounce(d);angular.element(a).on("resize",L),e.$on("$destroy",function(){angular.element(a).off("resize",L),F.destroy(),_()}),c.$render=$,c.$viewChangeListeners.push($),c.$formatters.push(w),c.$formatters.push(T);var z,H,q,V,W,Y={};v();var G=!1,K=angular.isDefined(n.discrete);this._onInput=C,this._onPanStart=S,this._onPan=E}}angular.module("material.components.slider",["material.core","material.animations","material.services.aria","material.services.theming"]).directive("mdSlider",["$mdTheming",e])}(),function(){function e(e,t,n,i,a){function o(e){function n(e,t){t.addClass("md-sticky-clone");var n={element:e,clone:t};return p.items.push(n),u.parent().prepend(n.clone),m(),function(){p.items.forEach(function(t,n){t.element[0]===e[0]&&(p.items.splice(n,1),t.clone.remove())}),m()}}function a(){u[0].getBoundingClientRect();p.items.forEach(o),p.items=p.items.sort(function(e,t){return e.top<t.top?-1:1});for(var e,t=u.prop("scrollTop"),n=p.items.length-1;n>=0;n--)if(t>p.items[n].top){e=p.items[n];break}l(e)}function o(e){var t=e.element[0];for(e.top=0,e.left=0;t&&t!==u[0];)e.top+=t.offsetTop,e.left+=t.offsetLeft,t=t.offsetParent;e.height=e.element.prop("offsetHeight"),e.clone.css("margin-left",e.left+"px")}function r(){var e=u.prop("scrollTop"),t=e>(r.prevScrollTop||0);r.prevScrollTop=e,0===e?l(null):t&&p.next?p.next.top-e<=0?l(p.next):p.current&&(p.next.top-e<=p.next.height?d(p.current,p.next.top-p.next.height-e):d(p.current,null)):!t&&p.current&&(e<p.current.top&&l(p.prev),p.current&&p.next&&(e>=p.next.top-p.current.height?d(p.current,p.next.top-e-p.current.height):d(p.current,null)))}function l(e){if(p.current!==e){p.current&&(d(p.current,null),c(p.current,null)),e&&c(e,"active"),p.current=e;var t=p.items.indexOf(e);p.next=p.items[t+1],p.prev=p.items[t-1],c(p.next,"next"),c(p.prev,"prev")}}function c(e,t){e&&e.state!==t&&(e.state&&(e.clone.attr("sticky-prev-state",e.state),e.element.attr("sticky-prev-state",e.state)),e.clone.attr("sticky-state",t),e.element.attr("sticky-state",t),e.state=t)}function d(e,n){e&&(null===n||void 0===n?e.translateY&&(e.translateY=null,e.clone.css(t.TRANSFORM,"")):(e.translateY=n,e.clone.css(t.TRANSFORM,"translate3d("+e.left+"px,"+n+"px,0)")))}var u=e.$element,m=i.debounce(a);s(u),u.on("$scrollstart",m),u.on("$scroll",r);var p;return p={prev:null,current:null,next:null,items:[],add:n,refreshElements:a}}function r(){var t,n=angular.element("<div>");e[0].body.appendChild(n[0]);for(var i=["sticky","-webkit-sticky"],a=0;a<i.length;++a)if(n.css({position:i[a],top:0,"z-index":2}),n.css("position")==i[a]){t=i[a];break}return n.remove(),t}function s(e){function t(){+a.now()-o>r?(n=!1,e.triggerHandler("$scrollend")):(e.triggerHandler("$scroll"),i(t))}var n,o,r=200;e.on("scroll touchmove",function(){n||(n=!0,i(t),e.triggerHandler("$scrollstart")),e.triggerHandler("$scroll"),o=+a.now()})}var l=r();return function(e,t,n){var i=t.controller("mdContent");if(i)if(l)t.css({position:l,top:0,"z-index":2});else{var a=i.$element.data("$$sticky");a||(a=o(i),i.$element.data("$$sticky",a));var r=a.add(t,n||t.clone());e.$on("$destroy",r)}}}angular.module("material.components.sticky",["material.core","material.components.content","material.animations"]).factory("$mdSticky",["$document","$mdEffects","$compile","$$rAF","$mdUtil",e])}(),function(){function e(e,t,n){return{restrict:"E",replace:!0,transclude:!0,template:'<h2 class="md-subheader"><span class="md-subheader-content"></span></h2>',compile:function(i,a,o){var r=i[0].outerHTML;return function(i,a){function s(e){return angular.element(e[0].querySelector(".md-subheader-content"))}n(a),o(i,function(e){s(a).append(e)}),o(i,function(o){var l=t(angular.element(r))(i);n(l),s(l).append(o),e(i,a,l)})}}}}angular.module("material.components.subheader",["material.components.sticky","material.services.theming"]).directive("mdSubheader",["$mdSticky","$compile","$mdTheming",e])}(),function(){!function(){function e(e,t,n){return function(i,a,o){var r=n.toLowerCase(),s="md"+n,l=e(o[s])||angular.noop,c=t(i,r),d=function(e){l(i,e)};c(a,function(e){e.type==r&&d()})}}angular.module("material.components.swipe",["ng"]).factory("$mdSwipe",function(){return function(e,t){return t||(t="swipeleft swiperight"),function(n,i,a){function o(t){t.srcEvent.stopPropagation(),angular.isFunction(i)&&e.$apply(function(){i(t)})}function r(){return l.on(t,o),function(){l.off(t)}}function s(e,t){var n=t.indexOf("pan")>-1,i=t.indexOf("swipe")>-1;return n&&e.push([Hammer.Pan,{direction:Hammer.DIRECTION_HORIZONTAL}]),i&&e.push([Hammer.Swipe,{direction:Hammer.DIRECTION_HORIZONTAL}]),e}var l=new Hammer(n[0],{recognizers:s([],t)});return a||r(),e.$on("$destroy",function(){l.destroy()}),r}}}).directive("mdSwipeLeft",["$parse","$mdSwipe",function(t,n){return{restrict:"A",link:e(t,n,"SwipeLeft")}}]).directive("mdSwipeRight",["$parse","$mdSwipe",function(t,n){return{restrict:"A",link:e(t,n,"SwipeRight")}}])}()}(),function(){function e(e,t,n){function i(e,t){var i=angular.element(e[0].querySelector(".md-switch-thumb"));i.attr("disabled",t.disabled),i.attr("ngDisabled",t.ngDisabled);var o=a.compile(i,t);return function(e,t,i,a){n(t);var r=angular.element(t[0].querySelector(".md-switch-thumb"));return o(e,r,i,a)}}var a=e[0],o=t[0];return{restrict:"E",transclude:!0,template:'<div class="md-switch-bar"></div><div class="md-switch-thumb">'+o.template+"</div>",require:"?ngModel",compile:i}}angular.module("material.components.switch",["material.components.checkbox","material.components.radioButton","material.services.theming"]).directive("mdSwitch",["mdCheckboxDirective","mdRadioButtonDirective","$mdTheming",e])}(),function(){angular.module("material.components.tabs",["material.core","material.animations","material.services.theming","material.services.aria"])}(),function(){function e(e,t){return{restrict:"E",replace:!0,scope:{fid:"@?",label:"@?",value:"=ngModel"},compile:function(n,i){return angular.isUndefined(i.fid)&&(i.fid=t.nextUid()),{pre:function(e,t,n){angular.isDefined(n.disabled)&&(t.attr("disabled",!0),e.isDisabled=!0),e.inputType=n.type||"text",t.removeAttr("type"),t.attr("class",n.class)},post:e}},template:'<md-input-group ng-disabled="isDisabled" tabindex="-1"> <label for="{{fid}}" >{{label}}</label> <md-input id="{{fid}}" ng-model="value" type="{{inputType}}"></md-input></md-input-group>'}}function t(){return{restrict:"CE",controller:["$element",function(e){this.setFocused=function(t){e.toggleClass("md-input-focused",!!t)},this.setHasValue=function(t){e.toggleClass("md-input-has-value",t)}}]}}function n(e){return{restrict:"E",replace:!0,template:"<input >",require:["^?mdInputGroup","?ngModel"],link:function(t,n,i,a){function o(e){return e=angular.isUndefined(e)?n.val():e,angular.isDefined(e)&&null!==e&&""!=e.toString().trim()}if(a[0]){var r=a[0],s=a[1],l=e.isParentDisabled(n);n.attr({tabindex:l?-1:0,"aria-disabled":l?"true":"false",type:i.type||n.parent().attr("type")||"text"}),s&&s.$formatters.push(function(e){return r.setHasValue(o(e)),e}),n.on("input",function(){r.setHasValue(o())}).on("focus",function(){r.setFocused(!0)}).on("blur",function(){r.setFocused(!1),r.setHasValue(o())}),t.$on("$destroy",function(){r.setFocused(!1),r.setHasValue(!1)})}}}}angular.module("material.components.textField",["material.core","material.services.theming"]).directive("mdInputGroup",[t]).directive("mdInput",["$mdUtil",n]).directive("mdTextFloat",["$mdTheming","$mdUtil",e])}(),function(){function e(){return{restrict:"E"}}function t(e,t,n,i){function a(t,a,o){a.addClass(o.position.split(" ").map(function(e){return"md-"+e}).join(" ")),o.parent.addClass(r(o.position));var s=i(t,"swipeleft swiperight");return o.detachSwipe=s(a,function(t){a.addClass("md-"+t.type),e(l.hide)}),n.enter(a,o.parent)}function o(e,t,i){return i.detachSwipe(),i.parent.removeClass(r(i.position)),n.leave(t)}function r(e){return"md-toast-open-"+(e.indexOf("top")>-1?"top":"bottom")}var s={onShow:a,onRemove:o,position:"bottom left",themable:!0,hideDelay:3e3},l=t(s);return l}angular.module("material.components.toast",["material.services.interimElement","material.components.swipe"]).directive("mdToast",[e]).factory("$mdToast",["$timeout","$$interimElement","$animate","$mdSwipe",t])}(),function(){function e(e,t,n,i){return{restrict:"E",controller:angular.noop,link:function(a,o,r){function s(){function i(t,i){n.elementIsSibling(o,i)&&(d&&d.off("scroll",h),i.on("scroll",h),i.attr("scroll-shrink","true"),d=i,e(s))}function s(){c=o.prop("offsetHeight"),d.css("margin-top",-c*p+"px"),l()}function l(e){var n=e?e.target.scrollTop:m;f(),u=Math.min(c/p,Math.max(0,u+n-m)),o.css(t.TRANSFORM,"translate3d(0,"+-u*p+"px,0)"),d.css(t.TRANSFORM,"translate3d(0,"+(c-u)*p+"px,0)"),m=n}var c,d,u=0,m=0,p=r.shrinkSpeedFactor||.5,h=e.debounce(l),f=n.debounce(s,5e3);a.$on("$mdContentLoaded",i)}i(o),angular.isDefined(r.scrollShrink)&&s()}}}angular.module("material.components.toolbar",["material.core","material.components.content","material.services.theming","material.animations"]).directive("mdToolbar",["$$rAF","$mdEffects","$mdUtil","$mdTheming",e])}(),function(){function e(e,t,n,i,a,o){function r(r,d,u,m){function p(){r.visible&&g()}function h(t){h.value=!!t,h.queued||(t?(h.queued=!0,e(function(){r.visible=h.value,h.queued=!1},s)):e(function(){r.visible=!1}))}function f(){d.removeClass("md-hide"),b.attr("aria-describedby",d.attr("id")),c.append(d),n(function(){n(function(){g(),r.visible&&d.addClass("md-show")})})}function v(){d.removeClass("md-show").addClass("md-hide"),b.removeAttr("aria-describedby"),e(function(){r.visible||d.detach()},200,!1)}function g(){var e=d[0].getBoundingClientRect(),n=b[0].getBoundingClientRect();m&&(n.top+=m.$element.prop("scrollTop"),n.left+=m.$element.prop("scrollLeft"));var i="bottom",a={left:n.left+n.width/2-e.width/2,top:n.top+n.height};a.left=Math.min(a.left,t.innerWidth-e.width-l),a.left=Math.max(a.left,l),a.top+e.height>t.innerHeight&&(a.top=n.top-e.height,i="top"),d.css({top:a.top+"px",left:a.left+"px"}),d.attr("width-32",Math.ceil(e.width/32)),d.attr("md-direction",i)}o(d);var b=d.parent();d.detach(),d.attr("role","tooltip"),d.attr("id",u.id||"tooltip_"+a.nextUid()),b.on("focus mouseenter touchstart",function(){h(!0)}),b.on("blur mouseleave touchend touchcancel",function(){i.activeElement!==b[0]&&h(!1)}),r.$watch("visible",function(e){e?f():v()});var y=n.debounce(p);angular.element(t).on("resize",y),r.$on("$destroy",function(){r.visible=!1,d.remove(),angular.element(t).off("resize",y)})}var s=400,l=8,c=angular.element(document.body);return{restrict:"E",transclude:!0,require:"^?mdContent",template:'<div class="md-background"></div><div class="md-content" ng-transclude></div>',scope:{visible:"=?"},link:r}}angular.module("material.components.tooltip",["material.core","material.services.theming"]).directive("mdTooltip",["$timeout","$window","$$rAF","$document","$mdUtil","$mdTheming",e])}(),function(){angular.module("material.components.whiteframe",[])}(),function(){function e(e,t){function n(e,n,i){var a=e[0];a.hasAttribute(n)||(i=angular.isString(i)&&i.trim()||"",i.length?e.attr(n,i):t.warn('ARIA: Attribute "',n,'", required for accessibility, is missing on node:',a))}function i(t,i,a){e(function(){n(t,i,a())})}function a(e,t){i(e,t,function(){return e.text().trim()})}return{expect:n,expectAsync:i,expectWithText:a}}angular.module("material.services.aria",[]).service("$mdAria",["$$rAF","$log",e])}(),function(){function e(e,t){var n=/^\s*([@=&])(\??)\s*(\w*)\s*$/;return function(i,a,o,r){function s(e,t,n){if(!angular.isDefined(a[e])){var o=r&&r.hasOwnProperty(t);return i[t]=o?r[t]:n,!0}return!1}angular.forEach(o||{},function(o,r){var l,c,d=o.match(n)||[],u=d[3]||r,m=d[1];switch(m){case"@":a.$observe(u,function(e){i[r]=e}),a.$$observers[u].$$scope=i,s(u,r)||(i[r]=t(a[u])(i));break;case"=":s(u,r)||(i[r]=""===a[u]?!0:i.$eval(a[u]),c=i.$watch(a[u],function(e){i[r]=e}),i.$on("$destroy",c));break;case"&":if(!s(u,r,angular.noop)){if(a[u]&&a[u].match(RegExp(r+"(.*?)")))throw new Error('& expression binding "'+r+'" looks like it will recursively call "'+a[u]+'" and cause a stack overflow! Please choose a different scopeName.');l=e(a[u]),i[r]=function(e){return l(i,e)}}}})}}angular.module("material.services.attrBind",[]).factory("$attrBind",["$parse","$interpolate",e])}(),function(){function e(e,t,n,i,a,o){this.compile=function(r){var s=r.templateUrl,l=r.template||"",c=r.controller,d=r.controllerAs,u=r.resolve||{},m=r.locals||{},p=r.transformTemplate||angular.identity;return angular.forEach(u,function(e,t){u[t]=angular.isString(e)?n.get(e):n.invoke(e)}),angular.extend(u,m),u.$template=s?t.get(s,{cache:o}).then(function(e){return e.data}):e.when(l),e.all(u).then(function(e){var t=p(e.$template),n=angular.element("<div>").html(t).contents(),o=i(n);return{locals:e,element:n,link:function(t){if(e.$scope=t,c){var i=a(c,e);n.data("$ngControllerController",i),n.children().data("$ngControllerController",i),d&&(t[d]=i)}return o(t)}}})}}angular.module("material.services.compiler",[]).service("$mdCompiler",["$q","$http","$injector","$compile","$controller","$templateCache",e])}(),function(){function e(e,t,n,i,a,o,r){return function(s){function l(e){m.length&&p.hide();var t=new u(e);return m.push(t),t.show().then(function(){return t.deferred.promise})}function c(e){var t=m.shift();t&&t.remove().then(function(){t.deferred.resolve(e)})}function d(e){var t=m.shift();t&&t.remove().then(function(){t.deferred.reject(e)})}function u(a){var l,c,d;return a=a||{},a=angular.extend({scope:a.scope||t.$new(a.isolateScope)},s,a),l={options:a,deferred:e.defer(),show:function(){return o.compile(a).then(function(t){function o(){a.hideDelay&&(c=n(p.hide,a.hideDelay))}a.parent||(a.parent=i.find("body"),a.parent.length||(a.parent=i)),d=t.link(a.scope),a.themable&&r(d);var s=a.onShow(a.scope,d,a);return e.when(s).then(function(){var e=a.onComplete||angular.noop;e.apply(null,[a.scope,d,a])}).then(o)})},cancelTimeout:function(){c&&(n.cancel(c),c=void 0)},remove:function(){l.cancelTimeout();var t=a.onRemove(a.scope,d,a);return e.when(t).then(function(){a.scope.$destroy()})}}}var m=[];s=angular.extend({onShow:function(e,t,n){return a.enter(t,n.parent)},onRemove:function(e,t){return a.leave(t)}},s||{});var p;return p={show:l,hide:c,cancel:d}}}angular.module("material.services.interimElement",["material.services.compiler","material.services.theming"]).factory("$$interimElement",["$q","$rootScope","$timeout","$rootElement","$animate","$mdCompiler","$mdTheming",e])}(),function(){function e(e,t,n){function i(e){e=a(e);var t;return angular.isDefined(t=s.get(e))?t:o(e)}function a(e){return l[e]||("("!=e.charAt(0)?"("+e+")":e)}function o(t){return s.put(t,!!e.matchMedia(t).matches)}function r(){var t=s.keys();if(t.length){for(var i=0,a=t.length;a>i;i++)s.put(t[i],!!e.matchMedia(t[i]).matches);n(angular.noop)}}var s=t.cacheFactory("$mdMedia",{capacity:15}),l={sm:"(min-width: 600px)",md:"(min-width: 960px)",lg:"(min-width: 1200px)"};return angular.element(e).on("resize",r),i}angular.module("material.services.media",["material.core"]).factory("$mdMedia",["$window","$mdUtil","$timeout",e])}(),function(){function e(e){var t=[];return{notFoundError:function(t){e.error("No instance found for handle",t)},getInstances:function(){return t},get:function(e){var n,i,a;for(n=0,i=t.length;i>n;n++)if(a=t[n],a.$$mdHandle===e)return a;return null},register:function(e,n){return e.$$mdHandle=n,t.push(e),function(){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}}}}angular.module("material.services.registry",[]).factory("$mdComponentRegistry",["$log",e])}(),function(){function e(){function e(e,i){function a(e,t){void 0===t&&(t=e,e=void 0),void 0===e&&(e=i),a.inherit(t,t)}return a.inherit=function(e,a){function o(t){var n=e.data("$mdThemeName");n&&e.removeClass("md-"+n+"-theme"),e.addClass("md-"+t+"-theme"),e.data("$mdThemeName",t)}var r=a.controller("mdTheme"),s=e.attr("md-theme-watch");if((n||angular.isDefined(s))&&"false"!=s){var l=i.$watch(function(){return r&&r.$mdTheme||t},o);e.on("$destroy",l)}else{var c=r&&r.$mdTheme||t;o(c)}},a}var t="default",n=!1;return{setDefaultTheme:function(e){t=e},alwaysWatchTheme:function(e){n=e},$get:["$rootElement","$rootScope",e]}}function t(e){return{priority:100,link:{pre:function(t,n,i){var a={$setTheme:function(e){a.$mdTheme=e}};n.data("$mdThemeController",a),a.$setTheme(e(i.mdTheme)(t)),i.$observe("mdTheme",a.$setTheme)}}}}function n(e){return e}angular.module("material.services.theming",[]).directive("mdTheme",["$interpolate",t]).directive("mdThemable",["$mdTheming",n]).provider("$mdTheming",[e])}(),function(){function e(e,t,n,i){function a(a,o,r,s){function l(){m(),i(m,100,!1)}function c(){var t=u.selected()&&u.selected().element;if(!t||u.count()<2)o.css({display:"none",width:"0px"});else{var n=t.prop("offsetWidth"),i=t.prop("offsetLeft")+(u.$$pagingOffset||0);o.css({display:n>0?"block":"none",width:n+"px"}),o.css(e.TRANSFORM,"translate3d("+i+"px,0,0)")}}var d=s[0],u=s[1];if(!d){var m=n.debounce(c);a.$watch(u.selected,c),a.$on("$mdTabsChanged",m),a.$on("$mdTabsPaginationChanged",m),angular.element(t).on("resize",l),a.$on("$destroy",function(){angular.element(t).off("resize",l)})}}return{restrict:"E",require:["^?nobar","^mdTabs"],link:a}}angular.module("material.components.tabs").directive("mdTabsInkBar",["$mdEffects","$window","$$rAF","$timeout",e])}(),function(){function e(e,t,n,i,a){function o(o,l,c,d){function u(e){if(y.active){var t=angular.element(e.target).controller("mdTab"),n=v(t);n!==y.page&&(t.element.blur(),g(n).then(function(){t.element.focus()}))}}function m(e){if(e)if(y.active){var t=v(e);g(t)}else $()}function p(e){var t,n=y.page+e;if(!d.selected()||v(d.selected())!==n){var i;0>e?(i=(n+1)*y.itemsPerPage,t=d.previous(d.itemAt(i))):(i=n*y.itemsPerPage-1,t=d.next(d.itemAt(i)))}g(n).then(function(){t&&t.element.focus()}),t&&d.select(t)}function h(){var e=l.find("md-tab"),t=l.parent().prop("clientWidth")-s,n=t&&r*d.count()>t,i=n!==y.active;if(0>=t&&(n=!1,i=!0),y.active=n,n){y.pagesCount=Math.ceil(r*d.count()/t),y.itemsPerPage=Math.max(1,Math.floor(d.count()/y.pagesCount)),y.tabWidth=t/y.itemsPerPage,b.css("width",y.tabWidth*d.count()+"px"),e.css("width",y.tabWidth+"px");
var o=v(d.selected());g(o)}else i&&a(function(){b.css("width",""),e.css("width",""),f(0),y.page=-1})}function f(t){function n(t){t.target===b[0]&&(b.off(e.TRANSITIONEND_EVENT,n),a.resolve())}if(d.pagingOffset===t)return i.when();var a=i.defer();return d.$$pagingOffset=t,b.css(e.TRANSFORM,"translate3d("+t+"px,0,0)"),b.on(e.TRANSITIONEND_EVENT,n),a.promise}function v(e){var t=d.indexOf(e);return-1===t?0:Math.floor(t/y.itemsPerPage)}function g(e){if(e!==y.page){var t=y.pagesCount;return 0>e&&(e=0),e>t&&(e=t),y.hasPrev=e>0,y.hasNext=(e+1)*y.itemsPerPage<d.count(),y.page=e,a(function(){o.$broadcast("$mdTabsPaginationChanged")}),f(-e*y.itemsPerPage*y.tabWidth)}}var b=l.children(),y=o.pagination={page:-1,active:!1,clickNext:function(){p(1)},clickPrevious:function(){p(-1)}};h();var $=n.debounce(h);o.$on("$mdTabsChanged",$),angular.element(t).on("resize",$),b.on("focusin",u),o.$on("$destroy",function(){angular.element(t).off("resize",$),b.off("focusin",u)}),o.$watch(d.selected,m)}var r=96,s=64;return{restrict:"A",require:"^mdTabs",link:o}}angular.module("material.components.tabs").directive("mdTabsPagination",["$mdEffects","$window","$$rAF","$$q","$timeout",e])}(),function(){function e(e,t,n,i,a){function o(){return t[0].hasAttribute("disabled")}function r(t){d.content.length&&(d.contentContainer.append(d.content),d.contentScope=e.$parent.$new(),t.append(d.contentContainer),n(d.contentContainer)(d.contentScope),a.disconnectScope(d.contentScope))}function s(){d.hammertime.destroy(),i.leave(d.contentContainer).then(function(){d.contentScope&&d.contentScope.$destroy(),d.contentScope=null})}function l(){a.reconnectScope(d.contentScope),d.hammertime.on("swipeleft swiperight",e.onSwipe),t.addClass("active"),t.attr("aria-selected",!0),t.attr("tabIndex",0),i.removeClass(d.contentContainer,"ng-hide"),e.onSelect()}function c(){a.disconnectScope(d.contentScope),d.hammertime.off("swipeleft swiperight",e.onSwipe),t.removeClass("active"),t.attr("aria-selected",!1),t.attr("tabIndex",-1),i.addClass(d.contentContainer,"ng-hide"),e.onDeselect()}var d=this;d.contentContainer=angular.element('<div class="md-tab-content ng-hide">'),d.hammertime=Hammer(d.contentContainer[0]),d.element=t,d.isDisabled=o,d.onAdd=r,d.onRemove=s,d.onSelect=l,d.onDeselect=c}angular.module("material.components.tabs").controller("$mdTab",["$scope","$element","$compile","$animate","$mdUtil",e])}(),function(){function e(e,t,n,i,a){function o(n,o){var r=n.find("md-tab-label");r.length?r.remove():r=angular.isDefined(o.label)?angular.element("<md-tab-label>").html(o.label):angular.element("<md-tab-label>").append(n.contents().remove());var s=n.contents().remove();return function(n,o,l,c){function d(){var e=r.clone();o.append(e),t(e)(n.$parent),b.content=s.clone()}function u(){n.$apply(function(){y.select(b),b.element.focus()})}function m(e){if(e.keyCode==a.KEY_CODE.SPACE||e.keyCode==a.KEY_CODE.ENTER)o.triggerHandler("click"),e.preventDefault();else if(e.keyCode===a.KEY_CODE.LEFT_ARROW){var t=y.previous(b);t&&t.element.focus()}else if(e.keyCode===a.KEY_CODE.RIGHT_ARROW){var n=y.next(b);n&&n.element.focus()}}function p(e){n.$apply(function(){"swipeleft"===e.type?y.select(y.next()):y.select(y.previous())})}function h(){n.$watch("$parent.$index",function(e){y.move(b,e)})}function f(){function e(e){var t=y.selected()===b;e&&!t?y.select(b):!e&&t&&y.deselect(b)}var t=n.$parent.$watch("!!("+l.active+")",e);n.$on("$destroy",t)}function v(){function e(e){o.attr("aria-disabled",e);var t=y.selected()===b;t&&e&&y.select(y.next()||y.previous())}n.$watch(b.isDisabled,e)}function g(){var e=l.id||"tab_"+i.nextUid();if(o.attr({id:e,role:"tab",tabIndex:-1}),s.length){var t="content_"+e;o.attr("aria-controls")||o.attr("aria-controls",t),b.contentContainer.attr({id:t,role:"tabpanel","aria-labelledby":e})}}var b=c[0],y=c[1];d(),g();var $=e.attachButtonBehavior(o);y.add(b),n.$on("$destroy",function(){$(),y.remove(b)}),angular.isDefined(l.ngClick)||o.on("click",u),o.on("keydown",m),n.onSwipe=p,angular.isNumber(n.$parent.$index)&&h(),angular.isDefined(l.active)&&f(),v()}}return{restrict:"E",require:["mdTab","^mdTabs"],controller:"$mdTab",scope:{onSelect:"&",onDeselect:"&",label:"@"},compile:o}}angular.module("material.components.tabs").directive("mdTab",["$mdInkRipple","$compile","$mdAria","$mdUtil","$mdConstant",e])}(),function(){function e(e,t,n){function i(){return p.itemAt(e.selectedIndex)}function a(t,n){m.add(t,n),t.onAdd(p.contentArea),-1!==e.selectedIndex&&angular.isNumber(e.selectedIndex)&&e.selectedIndex!==p.indexOf(t)||p.select(t),e.$broadcast("$mdTabsChanged")}function o(t,n){m.contains(t)&&(n||p.selected()===t&&(m.count()>1?p.select(p.previous()||p.next()):p.deselect(t)),m.remove(t),t.onRemove(),e.$broadcast("$mdTabsChanged"))}function r(t,n){var i=p.selected()===t;m.remove(t),m.add(t,n),i&&p.select(t),e.$broadcast("$mdTabsChanged")}function s(t){!t||t.isSelected||t.isDisabled()||m.contains(t)&&(p.deselect(p.selected()),e.selectedIndex=p.indexOf(t),t.isSelected=!0,t.onSelect())}function l(t){t&&t.isSelected&&m.contains(t)&&(e.selectedIndex=-1,t.isSelected=!1,t.onDeselect())}function c(e,t){return m.next(e||p.selected(),t||u)}function d(e,t){return m.previous(e||p.selected(),t||u)}function u(e){return e&&!e.isDisabled()}var m=n.iterator([],!1),p=this;p.element=t,p.contentArea=angular.element(t[0].querySelector(".md-tabs-content")),p.inRange=m.inRange,p.indexOf=m.indexOf,p.itemAt=m.itemAt,p.count=m.count,p.selected=i,p.add=a,p.remove=o,p.move=r,p.select=s,p.deselect=l,p.next=c,p.previous=d,e.$on("$destroy",function(){p.deselect(p.selected());for(var e=m.count()-1;e>=0;e--)p.remove(m[e],!0)})}angular.module("material.components.tabs").controller("$mdTabs",["$scope","$element","$mdUtil",e])}(),function(){function e(e,t){function n(e,n,i,a){function o(){n.attr({role:"tablist"})}function r(){e.$watch("selectedIndex",function(e,t){if(a.deselect(a.itemAt(t)),a.inRange(e)){var n=a.itemAt(e);n&&n.isDisabled()&&(n=e>t?a.next(n):a.previous(n)),a.select(n)}})}t(n),o(),r()}return{restrict:"E",controller:"$mdTabs",require:"mdTabs",transclude:!0,scope:{selectedIndex:"=?selected"},template:'<section class="md-header" ng-class="{\'md-paginating\': pagination.active}"><button class="md-paginator md-prev" ng-if="pagination.active && pagination.hasPrev" ng-click="pagination.clickPrevious()" aria-hidden="true"></button><div class="md-header-items-container" md-tabs-pagination><div class="md-header-items" ng-transclude></div><md-tabs-ink-bar></md-tabs-ink-bar></div><button class="md-paginator md-next" ng-if="pagination.active && pagination.hasNext" ng-click="pagination.clickNext()" aria-hidden="true"></button></section><section class="md-tabs-content"></section>',link:n}}angular.module("material.components.tabs").directive("mdTabs",["$parse","$mdTheming",e])}();var DocsApp=angular.module("docsApp",["ngMaterial","ngRoute","angularytics"]).config(["COMPONENTS","DEMOS","PAGES","$routeProvider",function(e,t,n,i){i.when("/",{templateUrl:"partials/home.tmpl.html"}).when("/layout/:tmpl",{templateUrl:function(e){return"partials/layout-"+e.tmpl+".tmpl.html"}}),angular.forEach(n,function(e){angular.forEach(e,function(e){i.when(e.url,{templateUrl:e.outputPath})})}),angular.forEach(e,function(e){angular.forEach(e.docs,function(t){t.url="/"+t.url,i.when(t.url,{templateUrl:t.outputPath,resolve:{component:function(){return e},doc:function(){return t}},controller:"ComponentDocCtrl"})})}),angular.forEach(t,function(t){var n;angular.forEach(e,function(e){t.name===e.name&&(n=e)}),n=n||angular.extend({},t),i.when(t.url,{templateUrl:"partials/demo.tmpl.html",controller:"DemoCtrl",resolve:{component:function(){return n},demos:function(){return t.demos}}})}),i.otherwise("/")}]).config(["AngularyticsProvider",function(e){e.setEventHandlers(["Console","GoogleUniversal"])}]).run(["Angularytics","$rootScope",function(e){e.init()}]).factory("menu",["COMPONENTS","DEMOS","PAGES","$location","$rootScope",function(e,t,n,i,a){function o(e,t){return e.name<t.name?-1:1}function r(){var e=!1,t=i.path();s.forEach(function(n){n.pages.forEach(function(i){t===i.url&&(d.selectSection(n),d.selectPage(n,i),e=!0)})}),e||d.selectSection(s[3])}var s=[{name:"Layout",pages:[{name:"Container Elements",id:"layoutContainers",url:"/layout/container"},{name:"Grid System",id:"layoutGrid",url:"/layout/grid"},{name:"Child Alignment",id:"layoutAlign",url:"/layout/alignment"},{name:"Options",id:"layoutOptions",url:"/layout/options"}]}],l={};e.forEach(function(e){e.docs.forEach(function(e){angular.isDefined(e.private)||(l[e.type]=l[e.type]||[],l[e.type].push(e))})});var c=[];angular.forEach(t,function(e){c.push({name:e.label,url:e.url})}),s.unshift({name:"Demos",pages:c.sort(o)}),angular.forEach(n,function(e,t){s.push({name:t,pages:e})}),s.push({name:"Services",pages:l.service.sort(o)}),s.push({name:"Directives",pages:l.directive.sort(o)});var d;return a.$on("$locationChangeSuccess",r),d={sections:s,selectSection:function(e){d.openedSection=e},toggleSelectSection:function(e){d.openedSection=d.openedSection===e?null:e},isSectionSelected:function(e){return d.openedSection===e},selectPage:function(e,t){t&&t.url&&i.path(t.url),d.currentSection=e,d.currentPage=t},isPageSelected:function(e,t){return d.currentPage===t}}}]).controller("DocsCtrl",["$scope","COMPONENTS","BUILDCONFIG","$mdSidenav","$timeout","$mdDialog","menu","$location","$rootScope",function(e,t,n,i,a,o,r,s,l){function c(){e.closeMenu(),d.focus()}e.COMPONENTS=t,e.BUILDCONFIG=n,e.menu=r;var d=document.querySelector("[role='main']");l.$on("$locationChangeSuccess",c),e.closeMenu=function(){a(function(){i("left").close()})},e.openMenu=function(){a(function(){i("left").open()})},e.path=function(){return s.path()},e.goHome=function(){r.selectPage(null,null),s.path("/")}}]).controller("HomeCtrl",["$scope","$rootScope","$http",function(e,t,n){t.currentComponent=t.currentDoc=null,e.version="",e.versionURL="";Math.round((new Date).getTime()/1e3);n.get("version.json").then(function(t){var n=t.data.sha||"",i=t.data.url;n&&(e.versionURL=i+n,e.version=n.substr(0,6))})}]).controller("LayoutCtrl",["$scope","$attrs","$location","$rootScope",function(e,t,n,i){i.currentComponent=i.currentDoc=null}]).controller("ComponentDocCtrl",["$scope","doc","component","$rootScope","$templateCache","$http","$q",function(e,t,n,i){i.currentComponent=n,i.currentDoc=t}]).controller("DemoCtrl",["$rootScope","$scope","component","demos","$http","$templateCache","$q",function(e,t,n,i,a,o,r){e.currentComponent=n,e.currentDoc=null,t.demos=[],angular.forEach(i,function(e){var n=[e.index].concat(e.js||[]).concat(e.css||[]).concat(e.html||[]);r.all(n.map(function(e){return a.get(e.outputPath,{cache:o}).then(function(t){e.contents=t.data})})).then(function(){e.$files=n,e.$selectedFile=e.index,t.demos.push(e)})}),t.demos=t.demos.sort(function(e,t){return e.name>t.name?1:-1})}]).filter("humanizeDoc",function(){return function(e){return e?"directive"===e.type?e.name.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()}):e.label||e.name:void 0}}).filter("directiveBrackets",function(){return function(e){return e.indexOf("-")>-1?"<"+e+">":e}});DocsApp.constant("BUILDCONFIG",{ngVersion:"1.3.0",repository:"https://github.com/angular/material",commit:"700e888a644df9c59c66366a5f791486304aac0e"}),DocsApp.constant("COMPONENTS",[{name:"material.components.bottomSheet",type:"module",outputPath:"partials/api/material.components.bottomSheet/index.html",url:"api/material.components.bottomSheet",label:"material.components.bottomSheet",docs:[{name:"$mdBottomSheet",type:"service",outputPath:"partials/api/material.components.bottomSheet/service/$mdBottomSheet.html",url:"api/material.components.bottomSheet/service/$mdBottomSheet",label:"$mdBottomSheet"}]},{name:"material.components.button",type:"module",outputPath:"partials/api/material.components.button/index.html",url:"api/material.components.button",label:"material.components.button",docs:[{name:"mdButton",type:"directive",outputPath:"partials/api/material.components.button/directive/mdButton.html",url:"api/material.components.button/directive/mdButton",label:"mdButton"}]},{name:"material.components.card",type:"module",outputPath:"partials/api/material.components.card/index.html",url:"api/material.components.card",label:"material.components.card",docs:[{name:"mdCard",type:"directive",outputPath:"partials/api/material.components.card/directive/mdCard.html",url:"api/material.components.card/directive/mdCard",label:"mdCard"}]},{name:"material.components.checkbox",type:"module",outputPath:"partials/api/material.components.checkbox/index.html",url:"api/material.components.checkbox",label:"material.components.checkbox",docs:[{name:"mdCheckbox",type:"directive",outputPath:"partials/api/material.components.checkbox/directive/mdCheckbox.html",url:"api/material.components.checkbox/directive/mdCheckbox",label:"mdCheckbox"}]},{name:"material.components.content",type:"module",outputPath:"partials/api/material.components.content/index.html",url:"api/material.components.content",label:"material.components.content",docs:[{name:"mdContent",type:"directive",outputPath:"partials/api/material.components.content/directive/mdContent.html",url:"api/material.components.content/directive/mdContent",label:"mdContent"}]},{name:"material.components.dialog",type:"module",outputPath:"partials/api/material.components.dialog/index.html",url:"api/material.components.dialog",label:"material.components.dialog",docs:[{name:"$mdDialog",type:"service",outputPath:"partials/api/material.components.dialog/service/$mdDialog.html",url:"api/material.components.dialog/service/$mdDialog",label:"$mdDialog"}]},{name:"material.components.divider",type:"module",outputPath:"partials/api/material.components.divider/index.html",url:"api/material.components.divider",label:"material.components.divider",docs:[{name:"mdDivider",type:"directive",outputPath:"partials/api/material.components.divider/directive/mdDivider.html",url:"api/material.components.divider/directive/mdDivider",label:"mdDivider"}]},{name:"material.components.list",type:"module",outputPath:"partials/api/material.components.list/index.html",url:"api/material.components.list",label:"material.components.list",docs:[{name:"mdList",type:"directive",outputPath:"partials/api/material.components.list/directive/mdList.html",url:"api/material.components.list/directive/mdList",label:"mdList"},{name:"mdItem",type:"directive",outputPath:"partials/api/material.components.list/directive/mdItem.html",url:"api/material.components.list/directive/mdItem",label:"mdItem"}]},{name:"material.components.progressCircular",type:"module",outputPath:"partials/api/material.components.progressCircular/index.html",url:"api/material.components.progressCircular",label:"material.components.progressCircular",docs:[{name:"mdProgressCircular",type:"directive",outputPath:"partials/api/material.components.progressCircular/directive/mdProgressCircular.html",url:"api/material.components.progressCircular/directive/mdProgressCircular",label:"mdProgressCircular"}]},{name:"material.components.progressLinear",type:"module",outputPath:"partials/api/material.components.progressLinear/index.html",url:"api/material.components.progressLinear",label:"material.components.progressLinear",docs:[{name:"mdProgressLinear",type:"directive",outputPath:"partials/api/material.components.progressLinear/directive/mdProgressLinear.html",url:"api/material.components.progressLinear/directive/mdProgressLinear",label:"mdProgressLinear"}]},{name:"material.components.radioButton",type:"module",outputPath:"partials/api/material.components.radioButton/index.html",url:"api/material.components.radioButton",label:"material.components.radioButton",docs:[{name:"mdRadioGroup",type:"directive",outputPath:"partials/api/material.components.radioButton/directive/mdRadioGroup.html",url:"api/material.components.radioButton/directive/mdRadioGroup",label:"mdRadioGroup"},{name:"mdRadioButton",type:"directive",outputPath:"partials/api/material.components.radioButton/directive/mdRadioButton.html",url:"api/material.components.radioButton/directive/mdRadioButton",label:"mdRadioButton"}]},{name:"material.components.sidenav",type:"module",outputPath:"partials/api/material.components.sidenav/index.html",url:"api/material.components.sidenav",label:"material.components.sidenav",docs:[{name:"mdSidenav",type:"directive",outputPath:"partials/api/material.components.sidenav/directive/mdSidenav.html",url:"api/material.components.sidenav/directive/mdSidenav",label:"mdSidenav"}]},{name:"material.components.slider",type:"module",outputPath:"partials/api/material.components.slider/index.html",url:"api/material.components.slider",label:"material.components.slider",docs:[{name:"mdSlider",type:"directive",outputPath:"partials/api/material.components.slider/directive/mdSlider.html",url:"api/material.components.slider/directive/mdSlider",label:"mdSlider"}]},{name:"material.components.subheader",type:"module",outputPath:"partials/api/material.components.subheader/index.html",url:"api/material.components.subheader",label:"material.components.subheader",docs:[{name:"mdSubheader",type:"directive",outputPath:"partials/api/material.components.subheader/directive/mdSubheader.html",url:"api/material.components.subheader/directive/mdSubheader",label:"mdSubheader"}]},{name:"material.components.swipe",type:"module",outputPath:"partials/api/material.components.swipe/index.html",url:"api/material.components.swipe",label:"material.components.swipe",docs:[{name:"mdSwipeLeft",type:"directive",outputPath:"partials/api/material.components.swipe/directive/mdSwipeLeft.html",url:"api/material.components.swipe/directive/mdSwipeLeft",label:"mdSwipeLeft"},{name:"mdSwipeRight",type:"directive",outputPath:"partials/api/material.components.swipe/directive/mdSwipeRight.html",url:"api/material.components.swipe/directive/mdSwipeRight",label:"mdSwipeRight"}]},{name:"material.components.switch",type:"module",outputPath:"partials/api/material.components.switch/index.html",url:"api/material.components.switch",label:"material.components.switch",docs:[{name:"mdSwitch",type:"directive",outputPath:"partials/api/material.components.switch/directive/mdSwitch.html",url:"api/material.components.switch/directive/mdSwitch",label:"mdSwitch"}]},{name:"material.components.textField",type:"module",outputPath:"partials/api/material.components.textField/index.html",url:"api/material.components.textField",label:"material.components.textField",docs:[{name:"mdTextFloat",type:"directive",outputPath:"partials/api/material.components.textField/directive/mdTextFloat.html",url:"api/material.components.textField/directive/mdTextFloat",label:"mdTextFloat"}]},{name:"material.components.toast",type:"module",outputPath:"partials/api/material.components.toast/index.html",url:"api/material.components.toast",label:"material.components.toast",docs:[{name:"$mdToast",type:"service",outputPath:"partials/api/material.components.toast/service/$mdToast.html",url:"api/material.components.toast/service/$mdToast",label:"$mdToast"}]},{name:"material.components.toolbar",type:"module",outputPath:"partials/api/material.components.toolbar/index.html",url:"api/material.components.toolbar",label:"material.components.toolbar",docs:[{name:"mdToolbar",type:"directive",outputPath:"partials/api/material.components.toolbar/directive/mdToolbar.html",url:"api/material.components.toolbar/directive/mdToolbar",label:"mdToolbar"}]},{name:"material.components.tooltip",type:"module",outputPath:"partials/api/material.components.tooltip/index.html",url:"api/material.components.tooltip",label:"material.components.tooltip",docs:[{name:"mdTooltip",type:"directive",outputPath:"partials/api/material.components.tooltip/directive/mdTooltip.html",url:"api/material.components.tooltip/directive/mdTooltip",label:"mdTooltip"}]},{name:"material.components.tabs",type:"module",outputPath:"partials/api/material.components.tabs/index.html",url:"api/material.components.tabs",label:"material.components.tabs",docs:[{name:"mdTab",type:"directive",outputPath:"partials/api/material.components.tabs/directive/mdTab.html",url:"api/material.components.tabs/directive/mdTab",label:"mdTab"},{name:"mdTabs",type:"directive",outputPath:"partials/api/material.components.tabs/directive/mdTabs.html",url:"api/material.components.tabs/directive/mdTabs",label:"mdTabs"}]}]),DocsApp.constant("PAGES",{Theming:[{name:"Introduction",outputPath:"partials/Theming/01_introduction.html",url:"/Theming/01_introduction",label:"Introduction"},{name:"Using Themes",outputPath:"partials/Theming/02_using_themes.html",url:"/Theming/02_using_themes",label:"Using Themes"},{name:"Building Themes",outputPath:"partials/Theming/03_building.html",url:"/Theming/03_building",label:"Building Themes"},{name:"How it Works",outputPath:"partials/Theming/04_how_it_works.html",url:"/Theming/04_how_it_works",label:"How it Works"}]}),angular.module("docsApp").constant("DEMOS",[{name:"material.components.bottomSheet",label:"Bottom Sheet",demos:[{id:"bottomSheetdemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/bottomSheet/demoBasicUsage/style.css"}],html:[{name:"bottom-sheet-grid-template.html",label:"bottom-sheet-grid-template.html",fileType:"html",outputPath:"demo-partials/bottomSheet/demoBasicUsage/bottom-sheet-grid-template.html"},{name:"bottom-sheet-list-template.html",label:"bottom-sheet-list-template.html",fileType:"html",outputPath:"demo-partials/bottomSheet/demoBasicUsage/bottom-sheet-list-template.html"}],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/bottomSheet/demoBasicUsage/script.js"}],moduleName:"material.components.bottomSheet",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/bottomSheet/demoBasicUsage/index.html"},ngModule:{module:"bottomSheetDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.bottomSheet"},{name:"material.components.button",label:"Button",demos:[{id:"buttondemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/button/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/button/demoBasicUsage/script.js"}],moduleName:"material.components.button",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/button/demoBasicUsage/index.html"},ngModule:{module:"buttonsDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.button"},{name:"material.components.card",label:"Card",demos:[{id:"carddemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/card/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/card/demoBasicUsage/script.js"}],moduleName:"material.components.card",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/card/demoBasicUsage/index.html"},ngModule:{module:"cardDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.card"},{name:"material.components.checkbox",label:"Checkbox",demos:[{id:"checkboxdemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/checkbox/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/checkbox/demoBasicUsage/script.js"}],moduleName:"material.components.checkbox",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/checkbox/demoBasicUsage/index.html"},ngModule:{module:"checkboxDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.checkbox"},{name:"material.components.content",label:"Content",demos:[{id:"contentdemoBasicUsage",css:[],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/content/demoBasicUsage/script.js"}],moduleName:"material.components.content",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/content/demoBasicUsage/index.html"},ngModule:{module:"contentDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.content"},{name:"material.components.dialog",label:"Dialog",demos:[{id:"dialogdemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/dialog/demoBasicUsage/style.css"}],html:[{name:"dialog1.tmpl.html",label:"dialog1.tmpl.html",fileType:"html",outputPath:"demo-partials/dialog/demoBasicUsage/dialog1.tmpl.html"},{name:"dialog2.tmpl.html",label:"dialog2.tmpl.html",fileType:"html",outputPath:"demo-partials/dialog/demoBasicUsage/dialog2.tmpl.html"}],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/dialog/demoBasicUsage/script.js"}],moduleName:"material.components.dialog",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/dialog/demoBasicUsage/index.html"},ngModule:{module:"dialogDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.dialog"},{name:"material.components.divider",label:"Divider",demos:[{id:"dividerdemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/divider/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/divider/demoBasicUsage/script.js"}],moduleName:"material.components.divider",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/divider/demoBasicUsage/index.html"},ngModule:{module:"dividerDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.divider"},{name:"material.components.list",label:"List",demos:[{id:"listdemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/list/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/list/demoBasicUsage/script.js"}],moduleName:"material.components.list",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/list/demoBasicUsage/index.html"},ngModule:{module:"listDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.list"},{name:"material.components.progressCircular",label:"Progress Circular",demos:[{id:"progressCirculardemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/progressCircular/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/progressCircular/demoBasicUsage/script.js"}],moduleName:"material.components.progressCircular",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/progressCircular/demoBasicUsage/index.html"},ngModule:{module:"progressCircularDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.progressCircular"},{name:"material.components.progressLinear",label:"Progress Linear",demos:[{id:"progressLineardemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/progressLinear/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/progressLinear/demoBasicUsage/script.js"}],moduleName:"material.components.progressLinear",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/progressLinear/demoBasicUsage/index.html"},ngModule:{module:"progressLinearDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.progressLinear"},{name:"material.components.radioButton",label:"Radio Button",demos:[{id:"radioButtondemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/radioButton/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/radioButton/demoBasicUsage/script.js"}],moduleName:"material.components.radioButton",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/radioButton/demoBasicUsage/index.html"},ngModule:{module:"radioDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.radioButton"},{name:"material.components.sidenav",label:"Sidenav",demos:[{id:"sidenavdemoBasicUsage",css:[],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/sidenav/demoBasicUsage/script.js"}],moduleName:"material.components.sidenav",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/sidenav/demoBasicUsage/index.html"},ngModule:{module:"sidenavDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.sidenav"},{name:"material.components.slider",label:"Slider",demos:[{id:"sliderdemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/slider/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/slider/demoBasicUsage/script.js"}],moduleName:"material.components.slider",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/slider/demoBasicUsage/index.html"},ngModule:{module:"sliderDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.slider"},{name:"material.components.subheader",label:"Subheader",demos:[{id:"subheaderdemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/subheader/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/subheader/demoBasicUsage/script.js"}],moduleName:"material.components.subheader",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/subheader/demoBasicUsage/index.html"},ngModule:{module:"subheaderBasicDemo",dependencies:["ngMaterial"]}}],url:"/demo/material.components.subheader"},{name:"material.components.switch",label:"Switch",demos:[{id:"switchdemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/switch/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/switch/demoBasicUsage/script.js"}],moduleName:"material.components.switch",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/switch/demoBasicUsage/index.html"},ngModule:{module:"switchDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.switch"},{name:"material.components.tabs",label:"Tabs",demos:[{id:"tabsdemoDynamicTabs",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/tabs/demoDynamicTabs/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/tabs/demoDynamicTabs/script.js"}],moduleName:"material.components.tabs",name:"demoDynamicTabs",label:"Dynamic Tabs",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/tabs/demoDynamicTabs/index.html"},ngModule:{module:"tabsDemo2",dependencies:["ngMaterial"]}},{id:"tabsdemoStaticTabs",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/tabs/demoStaticTabs/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/tabs/demoStaticTabs/script.js"}],moduleName:"material.components.tabs",name:"demoStaticTabs",label:"Static Tabs",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/tabs/demoStaticTabs/index.html"},ngModule:{module:"tabsDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.tabs"},{name:"material.components.textField",label:"Text Field",demos:[{id:"textFielddemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/textField/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/textField/demoBasicUsage/script.js"}],moduleName:"material.components.textField",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/textField/demoBasicUsage/index.html"},ngModule:{module:"textFieldDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.textField"},{name:"material.components.toast",label:"Toast",demos:[{id:"toastdemoBasicUsage",css:[],html:[{name:"toast-template.html",label:"toast-template.html",fileType:"html",outputPath:"demo-partials/toast/demoBasicUsage/toast-template.html"}],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/toast/demoBasicUsage/script.js"}],moduleName:"material.components.toast",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/toast/demoBasicUsage/index.html"},ngModule:{module:"toastDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.toast"},{name:"material.components.toolbar",label:"Toolbar",demos:[{id:"toolbardemoBasicUsage",css:[],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/toolbar/demoBasicUsage/script.js"}],moduleName:"material.components.toolbar",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/toolbar/demoBasicUsage/index.html"},ngModule:{module:"toolbarDemo1",dependencies:["ngMaterial"]}},{id:"toolbardemoScrollShrink",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/toolbar/demoScrollShrink/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/toolbar/demoScrollShrink/script.js"}],moduleName:"material.components.toolbar",name:"demoScrollShrink",label:"Scroll Shrink",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/toolbar/demoScrollShrink/index.html"},ngModule:{module:"toolbarDemo2",dependencies:["ngMaterial"]}}],url:"/demo/material.components.toolbar"},{name:"material.components.tooltip",label:"Tooltip",demos:[{id:"tooltipdemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/tooltip/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/tooltip/demoBasicUsage/script.js"}],moduleName:"material.components.tooltip",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/tooltip/demoBasicUsage/index.html"},ngModule:{module:"tooltipDemo1",dependencies:["ngMaterial"]}}],url:"/demo/material.components.tooltip"},{name:"material.components.whiteframe",label:"Whiteframe",demos:[{id:"whiteframedemoBasicUsage",css:[{name:"style.css",label:"style.css",fileType:"css",outputPath:"demo-partials/whiteframe/demoBasicUsage/style.css"}],html:[],js:[{name:"script.js",label:"script.js",fileType:"js",outputPath:"demo-partials/whiteframe/demoBasicUsage/script.js"}],moduleName:"material.components.whiteframe",name:"demoBasicUsage",label:"Basic Usage",index:{name:"index.html",label:"index.html",fileType:"html",outputPath:"demo-partials/whiteframe/demoBasicUsage/index.html"},ngModule:{module:"whiteframeBasicUsage",dependencies:["ngMaterial"]}}],url:"/demo/material.components.whiteframe"}]),DocsApp.directive("demoInclude",["$q","$http","$compile","$templateCache",function(e,t,n,i){return function(a,o,r){function s(){t.get(u.index.outputPath,{cache:i}).then(function(t){d=angular.element('<div class="demo-content '+u.id+'">');
var i,r,s=t.data,m=!!u.ngModule.module;m?(angular.bootstrap(d[0],[u.ngModule.module]),i=d.scope(),r=d.injector().get("$compile"),a.$on("$destroy",function(){i.$destroy()})):(i=a.$new(),r=n),e.all([l(),c()]).finally(function(){i.$evalAsync(function(){o.append(d),d.html(s),r(d.contents())(i)})})})}function l(){return e.all((u.css||[]).map(function(e){return t.get(e.outputPath,{cache:i}).then(function(e){return e.data})})).then(function(e){e=e.join("\n");var t=angular.element("<style>"+e+"</style>");document.body.appendChild(t[0]),a.$on("$destroy",function(){t.remove()})})}function c(){return e.all((u.html||[]).map(function(e){return t.get(e.outputPath,{cache:i}).then(function(t){var n=d.injector().get("$templateCache");n.put(e.name,t.data),a.$on("$destroy",function(){n.remove(e.name)})})}))}var d,u=a.$eval(r.demoInclude);s()}}]),angular.module("docsApp").run(["$templateCache",function(e){e.put("partials/demo.tmpl.html",'<div layout="vertical" layout-fill class="doc-content">\n  <div flex layout="vertical">\n\n    <section ng-repeat="demo in demos" \n      class="demo-container md-whiteframe-z1 {{currentComponent.componentId}}-{{demo.id}}"\n      ng-class="{\'show-source\':demo.$showSource}" >\n\n      <md-toolbar class="demo-toolbar" >\n        <div class="md-toolbar-tools">\n          <span>{{demo.label}}</span>\n          <span flex></span>\n          <md-button\n            style="min-width: 72px;"\n            ng-click="demo.$showSource = !demo.$showSource">\n            Source\n          </md-button>\n        </div>\n      </md-toolbar>\n\n      <!-- Source views -->\n      <md-tabs style="border-top: solid 1px #00ADC3;"\n        class="demo-source-tabs" ng-show="demo.$showSource">\n        <md-tab ng-repeat="file in demo.$files"\n                      active="file === demo.$selectedFile"\n                      ng-click="demo.$selectedFile = file"\n                      label="{{file.name}}">\n            <md-content scroll-y class="demo-source-container">\n                    <hljs code="file.contents"\n                          lang="{{file.fileType}}" >\n                    </hljs>\n            </md-content>\n        </md-tab>\n      </md-tabs>\n\n      <!-- Live Demos -->\n      <div demo-include="demo">\n      </div>\n    </section>\n\n  </div>\n</div>\n')}]),angular.module("docsApp").run(["$templateCache",function(e){e.put("partials/home.tmpl.html",'<div ng-controller="HomeCtrl" layout="vertical">\n  <md-content flex>\n    <p>\n      <a href="http://www.google.com/design/spec/material-design/">Material Design</a> is a specification for a unified system of visual, motion, and interaction design that adapts across different devices.\n    </p>\n    <p>\n      The material design project for Angular is a complementary effort to the <a href="http://www.polymer-project.org/">Polymer</a> project\'s <a href="http://www.polymer-project.org/docs/elements/paper-elements.html">paper elements</a> collection. Our goal is to provide a set of AngularJS-native UI elements that implement the material design system.\n    </p>\n    <p>\n      For more, see our <a href="https://github.com/angular/material">repository on GitHub.</a>\n    </p>\n  </md-content>\n\n  <md-content layout="horizontal" layout-align="center center" style="padding-top: 50px">\n    <iframe width="560" height="315" title="Material Design" src="//www.youtube.com/embed/Q8TXgCzxEnw" frameborder="0" allowfullscreen></iframe>\n  </md-content>\n\n   <p>\n     These docs were generated from the code in commit \n     <a ng-href="{{BUILDCONFIG.repository}}/commit/{{BUILDCONFIG.commit}}" target="_blank">{{BUILDCONFIG.commit.substring(0,7)}}</a>.\n   </p>\n\n</div>\n')}]),angular.module("docsApp").run(["$templateCache",function(e){e.put("partials/layout-alignment.tmpl.html",'<div ng-controller="LayoutCtrl" layout="vertical" layout-fill class="layout-content layout-guidelines">\n\n  <p>\n    Child elements of a layout element can be aligned using the <code>layout-align</code>\n    attribute. In each demo, the center black line represents the "main axis",\n    which is the primary axis along which child element are laid out. For a horizontal layout,\n    child elements will line up horizontally along the main axis. For a vertical layout,\n    child elements will line up vertically along the main axis. Alternatively, the "cross axis"\n    is the imaginary line perpendicular to the black main axis line.\n  </p>\n\n\n\n  <h3 class="layout-title">Main Axis: Center</h3>\n  <p>\n    The <code>layout-align="center"</code> attribute will center the cells across the main axis.\n    Note that each demo\'s center black line represents the "main axis". Additionally, by default\n    each item will "stretch" the cross axis, which is explained later.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="center" class="inline-demo">\n      <div>center</div>\n      <div>center</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="center" class="inline-demo">\n      <div>center</div>\n      <div>center</div>\n    </div>\n  </div>\n\n\n  <h3 class="layout-title">Main Axis: Start</h3>\n  <p>\n    The <code>layout-align="start"</code> attribute will position the cell to the left for a\n    a horizontal layout, and at the top for a vertical layout. (Stretches the cross axis by default)\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="start" class="inline-demo">\n      <div>start</div>\n      <div>start</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="start" class="inline-demo">\n      <div>start</div>\n      <div>start</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis: End</h3>\n  <p>\n    The <code>layout-align="end"</code> attribute will position the cell to the right for a\n    a horizontal layout, and at the bottom for a vertical layout. (Stretches the cross axis by default)\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="end" class="inline-demo">\n      <div>end</div>\n      <div>end</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="end" class="inline-demo">\n      <div>end</div>\n      <div>end</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis: Space Around</h3>\n  <p>\n    The <code>layout-align="space-around"</code> attribute will evenly distribute\n    the cells and the space around them. (Stretches the cross axis by default)\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="space-around" class="inline-demo">\n      <div>Uno</div>\n      <div>Dos</div>\n      <div>Tres</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="space-around" class="inline-demo">\n      <div>Uno</div>\n      <div>Dos</div>\n      <div>Tres</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis: Space Between</h3>\n  <p>\n    The <code>layout-align="space-between"</code> attribute will evenly distribute\n    the cells and the free space between them, with the first cell is aligned\n    at the start, and the last cell aligned at the end. (Stretches the cross axis by default)\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="space-between" class="inline-demo">\n      <div>Uno</div>\n      <div>Dos</div>\n      <div>Tres</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="space-between" class="inline-demo">\n      <div>Uno</div>\n      <div>Dos</div>\n      <div>Tres</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis: Flex Cells</h3>\n  <p>\n    This demo shows how a layout\'s child cells react when the <code>flex</code> attributes\n    are added to the cells. Here the free space is evenly divided up within the two\n    cells, giving each cell 50% of the area. Note how setting an align attribute wouldn\'t matter\n    because there is no free space between the cells for the cells to be aligned to. Since\n    each flex cell is using up all of the free space, there\'s no arranging that could happen.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" class="inline-demo">\n      <div flex>Uno</div>\n      <div flex>Dos</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" class="inline-demo">\n      <div flex>Uno</div>\n      <div flex>Dos</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Cross Axis</h3>\n  <p>\n    The "cross axis" is the imaginary line perpendicular to the "main axis", which in each\n    demo is the center black line. The value within the value of the <code>layout-align</code>\n    attribute is always the main axis, and by default the cross axis is always "stretch", as seen\n    in the demos above. However, to also explicitly set the cross axis by providing\n    both the main and cross axis values, which are separated by a space.\n  </p>\n\n\n\n  <h3 class="layout-title">Centered Horizontal And Vertical</h3>\n  <p>\n    Is it possible to center a layout\'s child cells by both the main and cross axes?\n    Yes. Yes it is.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="center center" class="inline-demo">\n      <div>center center</div>\n      <div>center center</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="center center" class="inline-demo">\n      <div>center center</div>\n      <div>center center</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis Start, Cross Axis Center</h3>\n  <p>\n    The <code>layout-align="start center"</code> attribute packs up all of the cells at the "start" of the main axis,\n    and in the "center" of the cross axis. Note that each demo\'s center black line represents the\n    "main axis", which makes the imaginary perpendicular line the "cross axis".\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="start center" class="inline-demo">\n      <div>start center</div>\n      <div>start center</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="start center" class="inline-demo">\n      <div>start center</div>\n      <div>start center</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis End, Cross Axis Center</h3>\n  <p>\n    The <code>layout-align="end center"</code> attribute packs up all of the cells at the\n    "end" of the main axis, and in the "center" of the cross axis.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="end center" class="inline-demo">\n      <div>end center</div>\n      <div>end center</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="end center" class="inline-demo">\n      <div>end center</div>\n      <div>end center</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis Center, Cross Axis Start</h3>\n  <p>\n    The <code>layout-align="center start"</code> attribute packs up all of the cells at the\n    "center" of the main axis, and at the "start" of the cross axis.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="center start" class="inline-demo">\n      <div>center start</div>\n      <div>center start</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="center start" class="inline-demo">\n      <div>center start</div>\n      <div>center start</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis Start, Cross Axis Start</h3>\n  <p>\n    The <code>layout-align="start start"</code> attribute packs up all of the cells at the\n    "start" of the main axis, and at the "start" of the cross axis.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="start start" class="inline-demo">\n      <div>start start</div>\n      <div>start start</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="start start" class="inline-demo">\n      <div>start start</div>\n      <div>start start</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis End, Cross Axis Start</h3>\n  <p>\n    The <code>layout-align="end start"</code> attribute packs up all of the cells at the\n    "end" of the main axis, and at the "start" of the cross axis.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="end start" class="inline-demo">\n      <div>end start</div>\n      <div>end start</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="end start" class="inline-demo">\n      <div>end start</div>\n      <div>end start</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis Center, Cross Axis End</h3>\n  <p>\n    The <code>layout-align="center end"</code> attribute packs up all of the cells at the\n    "center" of the main axis, and at the "end" of the cross axis.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="center end" class="inline-demo">\n      <div>center end</div>\n      <div>center end</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="center end" class="inline-demo">\n      <div>center end</div>\n      <div>center end</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis Start, Cross Axis End</h3>\n  <p>\n    The <code>layout-align="start end"</code> attribute packs up all of the cells at the\n    "start" of the main axis, and at the "end" of the cross axis.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="start end" class="inline-demo">\n      <div>start end</div>\n      <div>start end</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="start end" class="inline-demo">\n      <div>start end</div>\n      <div>start end</div>\n    </div>\n  </div>\n\n\n\n  <h3 class="layout-title">Main Axis End, Cross Axis End</h3>\n  <p>\n    The <code>layout-align="end end"</code> attribute packs up all of the cells at the\n    "end" of the main axis, and at the "end" of the cross axis.\n  </p>\n  <div class="code-view">\n    <div layout="horizontal" layout-align="end end" class="inline-demo">\n      <div>end end</div>\n      <div>end end</div>\n    </div>\n  </div>\n  <div class="code-view">\n    <div layout="vertical" layout-align="end end" class="inline-demo">\n      <div>end end</div>\n      <div>end end</div>\n    </div>\n  </div>\n\n\n</div>\n')}]),angular.module("docsApp").run(["$templateCache",function(e){e.put("partials/layout-container.tmpl.html",'<div ng-controller="LayoutCtrl" layout="vertical" layout-fill class="layout-content">\n\n  <h3 class="layout-title">Overview</h3>\n  <p>\n    Angular Md uses a responsive CSS layout based on\n    <a href="http://www.w3.org/TR/css3-flexbox/">flexbox</a>, rather than\n    using CSS floats. Traditionally, floats proved to be the best solution for CSS\n    layouts, but with flexbox now available in a <a href="http://caniuse.com/#feat=flexbox">majority of browsers</a>,\n    we\'re moving onto a new era with improved layout capabilities and features.\n  </p>\n\n  <p>\n    The layout system uses element attributes, rather than CSS classes.\n    By doing so we\'re able to simplify creating layouts and make it easier to quickly generate\n    the structure required at various viewport sizes. The attribute system allows\n    assigning values following standard HTML conventions, which makes it easier to read and\n    understand compared to long strung together CSS classes. Additionally, the layout attributes\n    help to separate custom app styles from the core structure, which further simplifies code.\n  </p>\n\n  <md-divider></md-divider>\n  <h3 class="layout-title">Layout Attribute</h3>\n  <p>\n    Use the <code>layout</code> attribute on an element to arrange its children\n    horizontally in a row (<code>layout="horizontal"</code>), or vertically in\n    a column (<code>layout="vertical"</code>). The layout attribute\'s value\n    describes what the "main axis" is for its children.\n  </p>\n\n  <hljs lang="html">\n<div layout="horizontal">\n  <div>I\'m left.</div>\n  <div>I\'m right.</div>\n</div>\n\n<div layout="vertical">\n  <div>I\'m above.</div>\n  <div>I\'m below.</div>\n</div>\n  </hljs>\n\n  <md-divider></md-divider>\n  <h3 class="layout-title">Responsive Layout</h3>\n\n  <p>\n    From the ground up the layout system is built around being responsive to viewport size.\n    Out of the box it comes with useful and customizable breakpoints, which can be easily reused.\n    The <code>layout</code> attribute used with "horizontal" or "vertical" values define arrangement on all device sizes.\n    If you wish to define a layout depending upon the device size, there are\n    other <code>layout</code> attributes available:\n  </p>\n\n  <ul>\n    <li>\n      <code>layout</code> sets the default layout on all devices.\n    </li>\n    <li>\n      <code>layout-sm</code> sets the layout on device >=600px wide.\n    </li>\n    <li>\n      <code>layout-md</code> sets the layout on devices >=960px wide.\n    </li>\n    <li>\n      <code>layout-lg</code> sets the layout on devices >=1200px wide.\n    </li>\n  </ul>\n\n  <hljs lang="html">\n<div layout="vertical" layout-sm="horizontal">\n  <div>\n    I\'m above on tiny devices, and to the left on devices wider than 600px.\n  </div>\n  <div>\n    I\'m below on tiny devices, and to the right on devices wider than 600px.\n  </div>\n</div>\n  </hljs>\n\n</div>\n')}]),angular.module("docsApp").run(["$templateCache",function(e){e.put("partials/layout-grid.tmpl.html",'<div ng-controller="LayoutCtrl" layout="vertical" layout-fill class="layout-content">\n\n  <p>\n    The grid system is different than most because of its use of the\n    <a href="http://www.w3.org/TR/css3-flexbox/">CSS Flexible Box Layout Module</a> standard. With flexbox\n    you have the power to simply add in the columns and rows required, and they\'ll evenly take up the\n    available space of their parent layout container. There\'s no restriction to a 12 column grid, or\n    having to explicitly state how large each column should be.\n  </p>\n\n\n  <md-divider></md-divider>\n  <h3 class="layout-title">Flex Attribute</h3>\n  <p>\n    Child elements of a layout container with the <code>flex</code>\n    attribute will "flex", or stretch, to fill the available area within its parent layout container.\n    If a design requires three evenly spaced elements, simply add three elements with a\n    <code>flex</code> attribute. Elements without the flex attribute will take up their natural size,\n    whereas elements with the flex attribute will evenly fill in the available area.\n  </p>\n  <iframe-code-view>\n    <iframe src="/demo/layout/flex-cell.html"></iframe>\n  </iframe-code-view>\n\n\n  <md-divider></md-divider>\n  <h3 class="layout-title">Layout Padding</h3>\n  <p>\n    This layout has padding, or gutters, between each cell by adding the\n    <code>layout-padding</code> attribute. The previous examples added in their own\n    margins/padding manually, whereas the layout-padding attribute spaces it all out\n    evenly.\n  </p>\n  <iframe-code-view>\n    <iframe src="/demo/layout/layout-padding.html"></iframe>\n  </iframe-code-view>\n\n\n\n  <md-divider></md-divider>\n  <h3 class="layout-title">Layout Padding with Available Space Percents</h3>\n  <p>\n    Flex attributes can be given integers to represent the percentage of the available space\n    it should take up. Note that elements which are not given a percentage still\n    fill up the available area. Adjust the window size to see\n    the demo\'s responsive layout attributes at work.\n  </p>\n  <iframe-code-view>\n    <iframe src="/demo/layout/layout-padding-percents.html"></iframe>\n  </iframe-code-view>\n\n\n\n  <md-divider></md-divider>\n  <h3 class="layout-title">Layout Padding with Offsets</h3>\n  <p>\n    Elements can be offset from the left, but still allow the gutters to line up correctly.\n    Adjust the window size to see the demo\'s responsive layout attributes at work.\n  </p>\n  <iframe-code-view>\n    <iframe src="/demo/layout/layout-padding-offsets.html"></iframe>\n  </iframe-code-view>\n\n\n\n  <md-divider></md-divider>\n  <h3 class="layout-title">Layout Order</h3>\n  <p>\n    Child elements of a layout container can have their order changed through the use of the\n    <code>layout-order</code> attribute, and respective responsive\n    attributes such as: layout-order-sm, layout-order-md, and layout-order-lg. Reordering elements\n    is useful when the placement of a cell should be changed depending on the viewport size.\n  </p>\n  <p>\n    In the demo, notice how the default size (the smallest) has each of the elements in their\n    natural order determined by its markup. However, as the viewport changes size then each\n    individual cell can change their order using the layout-order attribute.\n  </p>\n  <iframe-code-view>\n    <iframe src="/demo/layout/layout-order.html"></iframe>\n  </iframe-code-view>\n\n\n\n  <md-divider></md-divider>\n  <h3 class="layout-title">Header, Menu, Main, Footer, no padding</h3>\n  <p>\n    This layout lets each of the header and footer tracks height be the size of their\n    respective content, and the middle track (menu and main) flex vertically to fill the\n    space of the entire layout. This is also an example of nested layouts, where the entire\n    body is a vertical layout (header/content/footer), and the content row is its own layout\n    (menu/main), and each layout has their own settings.\n  </p>\n  <p>\n    The body element has the <code>layout="vertical"</code> attribute.\n    By default the middle track has the menu and main elements stacked vertically. However,\n    the elements line up horizontally starting at the "small" size, which is determined by the\n    media query.\n  </p>\n  <iframe-code-view>\n    <iframe src="/demo/layout/full-width-header-menu-footer.html"></iframe>\n  </iframe-code-view>\n\n</div>\n')}]),angular.module("docsApp").run(["$templateCache",function(e){e.put("partials/layout-options.tmpl.html",'<div ng-controller="LayoutCtrl" layout="vertical" layout-fill class="layout-content">\n\n\n  <h3 class="layout-title">Responsive Layout</h3>\n\n  <p>\n    From the ground up the layout system is built around being responsive to viewport size.\n    Out of the box it comes with useful and customizable breakpoints, which can be easily reused.\n    The <code>layout</code> attribute used with "horizontal" or "vertical" values define arrangement on all device sizes.\n    If you wish to define a layout depending upon the device size, there are\n    other <code>layout</code> attributes available:\n  </p>\n\n  <ul>\n    <li>\n      <code>layout</code> sets the default layout on all devices.\n    </li>\n    <li>\n      <code>layout-sm</code> sets the layout on device >=600px wide.\n    </li>\n    <li>\n      <code>layout-md</code> sets the layout on devices >=960px wide.\n    </li>\n    <li>\n      <code>layout-lg</code> sets the layout on devices >=1200px wide.\n    </li>\n  </ul>\n\n  <br/><br/>\n\n  <h3 class="layout-title">Layout Options</h3>\n\n  <p>\n    <code>layout-padding</code> adds padding between this layout\'s children with\n    the <code>flex</code> attribute.\n  </p>\n\n  <hljs lang="html">\n<div layout="horizontal" layout-padding>\n  <div flex>I\'m on the left, and there\'s an empty area between.</div>\n  <div flex>I\'m on the right, and there\'s an empty area between.</div>\n</div>\n  </hljs>\n\n\n  <p>\n    <code>layout-fill</code> forces the layout element to fill its parent container.\n  </p>\n  <hljs lang="html">\n<div layout="vertical" layout-fill>\n  This layout fills up 100% of its parent\'s width and height.\n</div>\n  </hljs>\n\n  <br/><br/>\n\n  <md-divider></md-divider>\n\n  <h3 class="layout-title">Utility Attributes</h3>\n\n  <table>\n    <tr>\n      <td>block</td>\n      <td><code>display: block</code></td>\n    </tr>\n    <tr>\n      <td>block-sm</td>\n      <td><code>display: block</code> when the small media query is active.</td>\n    </tr>\n    <tr>\n      <td>block-md</td>\n      <td><code>display: block</code> when the medium media query is active.</td>\n    </tr>\n    <tr>\n      <td>block-lg</td>\n      <td><code>display: block</code> when the large media query is active.</td>\n    </tr>\n    <tr>\n      <td>inline-block</td>\n      <td><code>display: inline-block</code></td>\n    </tr>\n    <tr>\n      <td>inline-block-sm</td>\n      <td><code>display: inline-block</code> when the small media query is active.</td>\n    </tr>\n    <tr>\n      <td>inline-block-md</td>\n      <td><code>display: inline-block</code> when the medium media query is active.</td>\n    </tr>\n    <tr>\n      <td>inline-block-lg</td>\n      <td><code>display: inline-block</code> when the large media query is active.</td>\n    </tr>\n    <tr>\n      <td>hide</td>\n      <td><code>display: none</code></td>\n    </tr>\n    <tr>\n      <td>hide-sm</td>\n      <td><code>display: none</code> when the small media query is active.</td>\n    </tr>\n    <tr>\n      <td>hide-md</td>\n      <td><code>display: none</code> when the medium media query is active.</td>\n    </tr>\n    <tr>\n      <td>hide-lg</td>\n      <td><code>display: none</code> when the large media query is active.</td>\n    </tr>\n  </table>\n\n\n</div>\n')}]),angular.module("docsApp").run(["$templateCache",function(e){e.put("partials/view-source.tmpl.html",'<md-dialog class="view-source-dialog">\n\n  <md-tabs>\n    <md-tab ng-repeat="file in files"\n                  active="file === data.selectedFile"\n                  ng-click="data.selectedFile = file" >\n        <span class="window_label">{{file.viewType}}</span>\n    </md-tab>\n  </md-tabs>\n\n  <div class="md-content" scroll-y flex>\n    <div ng-repeat="file in files">\n      <hljs code="file.content"\n        lang="{{file.fileType}}"\n        ng-show="file === data.selectedFile" >\n      </hljs>\n    </div>\n  </div>\n\n  <div class="md-actions" layout="horizontal">\n    <md-button class="md-button-light" ng-click="$hideDialog()">\n      Done\n    </md-button>\n  </div>\n</md-dialog>\n')}]),DocsApp.directive("hljs",["$compile",function(){return{restrict:"E",compile:function(e,t){var n;return t.code||(n=e.html(),e.empty()),function(e,t,i){var a=angular.element('<pre><code class="highlight" ng-non-bindable></code></pre>'),o=a.find("code");if(i.code&&(n=e.$eval(i.code)),n){var r=hljs.highlight(i.language||i.lang,n.trim());r.value=r.value.replace(/=<span class="hljs-value">""<\/span>/gi,""),o.append(r.value).addClass("highlight"),t.append(a)}}}}}]).directive("codeView",function(){return{restrict:"C",link:function(e,t){var n=t.eq(0).clone();n.children().removeAttr("class");var i=hljs.highlight("html",n[0].innerHTML);i.value=i.value.replace(/=<span class="hljs-value">""<\/span>/gi,""),t.prepend("<pre><code>"+i.value+"</code></pre>"),t.find("code").addClass("highlight")}}}).directive("iframeCodeView",function(){return{restrict:"E",link:function(e,t){var n=t[0].firstElementChild;if(n&&n.src){var i=angular.element('<p><a class="md-button md-button-raised md-button-colored" href="'+n.src+'" target="_blank">Full View</a>            <a class="md-button md-button-raised md-button-colored" href="view-source:'+n.src+'" target="_blank">View Source</a></p>');t.append(i)}}}});var hljs=new function(){function e(e){return e.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function t(e){return e.nodeName.toLowerCase()}function n(e,t){var n=e&&e.exec(t);return n&&0==n.index}function i(e){var t=(e.className+" "+(e.parentNode?e.parentNode.className:"")).split(/\s+/);return t=t.map(function(e){return e.replace(/^lang(uage)?-/,"")}),t.filter(function(e){return g(e)||"no-highlight"==e})[0]}function a(e,t){var n={};for(var i in e)n[i]=e[i];if(t)for(var i in t)n[i]=t[i];return n}function o(e){var n=[];return function i(e,a){for(var o=e.firstChild;o;o=o.nextSibling)3==o.nodeType?a+=o.nodeValue.length:"br"==t(o)?a+=1:1==o.nodeType&&(n.push({event:"start",offset:a,node:o}),a=i(o,a),n.push({event:"stop",offset:a,node:o}));return a}(e,0),n}function r(n,i,a){function o(){return n.length&&i.length?n[0].offset!=i[0].offset?n[0].offset<i[0].offset?n:i:"start"==i[0].event?n:i:n.length?n:i}function r(n){function i(t){return" "+t.nodeName+'="'+e(t.value)+'"'}d+="<"+t(n)+Array.prototype.map.call(n.attributes,i).join("")+">"}function s(e){d+="</"+t(e)+">"}function l(e){("start"==e.event?r:s)(e.node)}for(var c=0,d="",u=[];n.length||i.length;){var m=o();if(d+=e(a.substr(c,m[0].offset-c)),c=m[0].offset,m==n){u.reverse().forEach(s);do l(m.splice(0,1)[0]),m=o();while(m==n&&m.length&&m[0].offset==c);u.reverse().forEach(r)}else"start"==m[0].event?u.push(m[0].node):u.pop(),l(m.splice(0,1)[0])}return d+e(a.substr(c))}function s(e){function t(e){return e&&e.source||e}function n(n,i){return RegExp(t(n),"m"+(e.cI?"i":"")+(i?"g":""))}function i(o,r){if(!o.compiled){if(o.compiled=!0,o.k=o.k||o.bK,o.k){var s={},l=function(t,n){e.cI&&(n=n.toLowerCase()),n.split(" ").forEach(function(e){var n=e.split("|");s[n[0]]=[t,n[1]?Number(n[1]):1]})};"string"==typeof o.k?l("keyword",o.k):Object.keys(o.k).forEach(function(e){l(e,o.k[e])}),o.k=s}o.lR=n(o.l||/\b[A-Za-z0-9_]+\b/,!0),r&&(o.bK&&(o.b="\\b("+o.bK.split(" ").join("|")+")\\b"),o.b||(o.b=/\B|\b/),o.bR=n(o.b),o.e||o.eW||(o.e=/\B|\b/),o.e&&(o.eR=n(o.e)),o.tE=t(o.e)||"",o.eW&&r.tE&&(o.tE+=(o.e?"|":"")+r.tE)),o.i&&(o.iR=n(o.i)),void 0===o.r&&(o.r=1),o.c||(o.c=[]);var c=[];o.c.forEach(function(e){e.v?e.v.forEach(function(t){c.push(a(e,t))}):c.push("self"==e?o:e)}),o.c=c,o.c.forEach(function(e){i(e,o)}),o.starts&&i(o.starts,r);var d=o.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([o.tE,o.i]).map(t).filter(Boolean);o.t=d.length?n(d.join("|"),!0):{exec:function(){return null}},o.continuation={}}}i(e)}function l(t,i,a,o){function r(e,t){for(var i=0;i<t.c.length;i++)if(n(t.c[i].bR,e))return t.c[i]}function d(e,t){return n(e.eR,t)?e:e.eW?d(e.parent,t):void 0}function u(e,t){return!a&&n(t.iR,e)}function m(e,t){var n=T.cI?t[0].toLowerCase():t[0];return e.k.hasOwnProperty(n)&&e.k[n]}function p(e,t,n,i){var a=i?"":b.classPrefix,o='<span class="'+a,r=n?"":"</span>";return o+=e+'">',o+t+r}function h(){if(!x.k)return e(E);var t="",n=0;x.lR.lastIndex=0;for(var i=x.lR.exec(E);i;){t+=e(E.substr(n,i.index-n));var a=m(x,i);a?(A+=a[1],t+=p(a[0],e(i[0]))):t+=e(i[0]),n=x.lR.lastIndex,i=x.lR.exec(E)}return t+e(E.substr(n))}function f(){if(x.sL&&!y[x.sL])return e(E);var t=x.sL?l(x.sL,E,!0,x.continuation.top):c(E);return x.r>0&&(A+=t.r),"continuous"==x.subLanguageMode&&(x.continuation.top=t.top),p(t.language,t.value,!1,!0)}function v(){return void 0!==x.sL?f():h()}function $(t,n){var i=t.cN?p(t.cN,"",!0):"";t.rB?(C+=i,E=""):t.eB?(C+=e(n)+i,E=""):(C+=i,E=n),x=Object.create(t,{parent:{value:x}})}function w(t,n){if(E+=t,void 0===n)return C+=v(),0;var i=r(n,x);if(i)return C+=v(),$(i,n),i.rB?0:n.length;var a=d(x,n);if(a){var o=x;o.rE||o.eE||(E+=n),C+=v();do x.cN&&(C+="</span>"),A+=x.r,x=x.parent;while(x!=a.parent);return o.eE&&(C+=e(n)),E="",a.starts&&$(a.starts,""),o.rE?0:n.length}if(u(n,x))throw new Error('Illegal lexeme "'+n+'" for mode "'+(x.cN||"<unnamed>")+'"');return E+=n,n.length||1}var T=g(t);if(!T)throw new Error('Unknown language: "'+t+'"');s(T);for(var x=o||T,C="",S=x;S!=T;S=S.parent)S.cN&&(C+=p(S.cN,C,!0));var E="",A=0;try{for(var k,N,P=0;;){if(x.t.lastIndex=P,k=x.t.exec(i),!k)break;N=w(i.substr(P,k.index-P),k[0]),P=k.index+N}w(i.substr(P));for(var S=x;S.parent;S=S.parent)S.cN&&(C+="</span>");return{r:A,value:C,language:t,top:x}}catch(B){if(-1!=B.message.indexOf("Illegal"))return{r:0,value:e(i)};throw B}}function c(t,n){n=n||b.languages||Object.keys(y);var i={r:0,value:e(t)},a=i;
return n.forEach(function(e){if(g(e)){var n=l(e,t,!1);n.language=e,n.r>a.r&&(a=n),n.r>i.r&&(a=i,i=n)}}),a.language&&(i.second_best=a),i}function d(e){return b.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,t){return t.replace(/\t/g,b.tabReplace)})),b.useBR&&(e=e.replace(/\n/g,"<br>")),e}function u(e){var t=b.useBR?e.innerHTML.replace(/\n/g,"").replace(/<br>|<br [^>]*>/g,"\n").replace(/<[^>]*>/g,""):e.textContent,n=i(e);if("no-highlight"!=n){var a=n?l(n,t,!0):c(t),s=o(e);if(s.length){var u=document.createElementNS("http://www.w3.org/1999/xhtml","pre");u.innerHTML=a.value,a.value=r(s,o(u),t)}a.value=d(a.value),e.innerHTML=a.value,e.className+=" hljs "+(!n&&a.language||""),e.result={language:a.language,re:a.r},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.r})}}function m(e){b=a(b,e)}function p(){if(!p.called){p.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,u)}}function h(){addEventListener("DOMContentLoaded",p,!1),addEventListener("load",p,!1)}function f(e,t){var n=y[e]=t(this);n.aliases&&n.aliases.forEach(function(t){$[t]=e})}function v(){return Object.keys(y)}function g(e){return y[e]||y[$[e]]}var b={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},y={},$={};this.highlight=l,this.highlightAuto=c,this.fixMarkup=d,this.highlightBlock=u,this.configure=m,this.initHighlighting=p,this.initHighlightingOnLoad=h,this.registerLanguage=f,this.listLanguages=v,this.getLanguage=g,this.inherit=a,this.IR="[a-zA-Z][a-zA-Z0-9_]*",this.UIR="[a-zA-Z_][a-zA-Z0-9_]*",this.NR="\\b\\d+(\\.\\d+)?",this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",this.BNR="\\b(0b[01]+)",this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",this.BE={b:"\\\\[\\s\\S]",r:0},this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE]},this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE]},this.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},this.CLCM={cN:"comment",b:"//",e:"$",c:[this.PWM]},this.CBCM={cN:"comment",b:"/\\*",e:"\\*/",c:[this.PWM]},this.HCM={cN:"comment",b:"#",e:"$",c:[this.PWM]},this.NM={cN:"number",b:this.NR,r:0},this.CNM={cN:"number",b:this.CNR,r:0},this.BNM={cN:"number",b:this.BNR,r:0},this.CSSNM={cN:"number",b:this.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},this.RM={cN:"regexp",b:/\//,e:/\/[gim]*/,i:/\n/,c:[this.BE,{b:/\[/,e:/\]/,r:0,c:[this.BE]}]},this.TM={cN:"title",b:this.IR,r:0},this.UTM={cN:"title",b:this.UIR,r:0}};hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},c:[{cN:"pi",b:/^\s*('|")use strict('|")/,r:10},e.ASM,e.QSM,e.CLCM,e.CBCM,e.CNM,{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/</,e:/>;/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,c:[e.CLCM,e.CBCM],i:/["'\(]/}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0}]}}),hljs.registerLanguage("css",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",n={cN:"function",b:t+"\\(",rB:!0,eE:!0,e:"\\("};return{cI:!0,i:"[=/|']",c:[e.CBCM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[n,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:t,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[e.CBCM,{cN:"rule",b:"[^\\s]",rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{cN:"value",eW:!0,eE:!0,c:[n,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]}]}]}}),hljs.registerLanguage("xml",function(){var e="[A-Za-z0-9\\._:-]+",t={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php",subLanguageMode:"continuous"},n={eW:!0,i:/</,r:0,c:[t,{cN:"attribute",b:e,r:0},{b:"=",r:0,c:[{cN:"value",v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"<!--",e:"-->",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{title:"style"},c:[n],starts:{e:"</style>",rE:!0,sL:"css"}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{title:"script"},c:[n],starts:{e:"</script>",rE:!0,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},t,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"title",b:"[^ /><]+",r:0},n]}]}});