180),0,u,d]];else c=[["M",e,t],["m",0,-r],["a",n,r,0,1,1,0,2*r],["a",n,r,0,1,1,0,-2*r],["z"]];return c.toString=i,c}function x(t){var n=a(t),r=String.prototype.toLowerCase;if(n.rel)return s(n.rel);e.is(t,"array")&&e.is(t&&t[0],"array")||(t=e.parsePathString(t));var o=[],u=0,l=0,d=0,c=0,f=0;"M"==t[0][0]&&(u=t[0][1],l=t[0][2],d=u,c=l,f++,o.push(["M",u,l]));for(var h=f,p=t.length;h1&&(v=W.sqrt(v),r*=v,a*=v);var g=r*r,M=a*a,b=(i==s?-1:1)*W.sqrt(q((g*M-g*y*y-M*_*_)/(g*y*y+M*_*_))),L=b*r*y/a+(t+u)/2,k=b*-a*_/r+(n+l)/2,w=W.asin(((n-k)/a).toFixed(9)),Y=W.asin(((l-k)/a).toFixed(9));w=tY&&(w-=2*z),!s&&Y>w&&(Y-=2*z)}var x=Y-w;if(q(x)>f){var T=Y,D=u,S=l;Y=w+f*(s&&Y>w?1:-1),u=L+r*W.cos(Y),l=k+a*W.sin(Y),p=C(u,l,r,a,o,0,s,D,S,[Y,T,L,k])}x=Y-w;var E=W.cos(w),O=W.sin(w),P=W.cos(Y),j=W.sin(Y),H=W.tan(x/4),A=4/3*r*H,N=4/3*a*H,I=[t,n],F=[t+A*O,n-N*E],R=[u+A*j,l-N*P],B=[u,l];if(F[0]=2*I[0]-F[0],F[1]=2*I[1]-F[1],d)return[F,R,B].concat(p);p=[F,R,B].concat(p).join().split(",");for(var U=[],V=0,J=p.length;V7){e[t].shift();for(var n=e[t];n.length;)f[t]="A",o&&(h[t]="A"),e.splice(t++,0,["C"].concat(n.splice(0,6)));e.splice(t,1),y=U(r.length,o&&o.length||0)}},c=function(e,t,n,a,i){e&&t&&"M"==e[i][0]&&"M"!=t[i][0]&&(t.splice(i,0,["M",a.x,a.y]),n.bx=0,n.by=0,n.x=e[i][1],n.y=e[i][2],y=U(r.length,o&&o.length||0))},f=[],h=[],p="",m="",_=0,y=U(r.length,o&&o.length||0);_r;r+=2){var o=[{x:+e[r-2],y:+e[r-1]},{x:+e[r],y:+e[r+1]},{x:+e[r+2],y:+e[r+3]},{x:+e[r+4],y:+e[r+5]}];t?r?a-4==r?o[3]={x:+e[0],y:+e[1]}:a-2==r&&(o[2]={x:+e[0],y:+e[1]},o[3]={x:+e[2],y:+e[3]}):o[0]={x:+e[a-2],y:+e[a-1]}:a-4==r?o[3]=o[2]:r||(o[0]={x:+e[r],y:+e[r+1]}),n.push(["C",(-o[0].x+6*o[1].x+o[2].x)/6,(-o[0].y+6*o[1].y+o[2].y)/6,(o[1].x+6*o[2].x-o[3].x)/6,(o[1].y+6*o[2].y-o[3].y)/6,o[2].x,o[2].y])}return n}var H=t.prototype,A=e.is,N=e._.clone,I="hasOwnProperty",F=/,?([a-z]),?/gi,R=parseFloat,W=Math,z=W.PI,B=W.min,U=W.max,V=W.pow,q=W.abs,J=l(1),G=l(),K=l(0,1),Z=e._unit2px,$={path:function(e){return e.attr("path")},circle:function(e){var t=Z(e);return Y(t.cx,t.cy,t.r)},ellipse:function(e){var t=Z(e);return Y(t.cx||0,t.cy||0,t.rx,t.ry)},rect:function(e){var t=Z(e);return w(t.x||0,t.y||0,t.width,t.height,t.rx,t.ry)},image:function(e){var t=Z(e);return w(t.x||0,t.y||0,t.width,t.height)},line:function(e){return"M"+[e.attr("x1")||0,e.attr("y1")||0,e.attr("x2"),e.attr("y2")]},polyline:function(e){return"M"+e.attr("points")},polygon:function(e){return"M"+e.attr("points")+"z"},deflt:function(e){var t=e.node.getBBox();return w(t.x,t.y,t.width,t.height)}};e.path=a,e.path.getTotalLength=J,e.path.getPointAtLength=G,e.path.getSubpath=function(e,t,n){if(this.getTotalLength(e)-n<1e-6)return K(e,t).end;var r=K(e,n,1);return t?K(r,t).end:r},H.getTotalLength=function(){if(this.node.getTotalLength)return this.node.getTotalLength()},H.getPointAtLength=function(e){return G(this.attr("d"),e)},H.getSubpath=function(t,n){return e.path.getSubpath(this.attr("d"),t,n)},e._.box=o,e.path.findDotsAtSegment=d,e.path.bezierBBox=c,e.path.isPointInsideBBox=f,e.closest=function(t,n,r,a){for(var i=100,s=o(t-i/2,n-i/2,i,i),u=[],l=r[0].hasOwnProperty("x")?function(e){return{x:r[e].x,y:r[e].y}}:function(e){return{x:r[e],y:a[e]}},d=0;i<=1e6&&!d;){for(var c=0,h=r.length;cy&&(_=y,u[c].len=y,m=u[c])}return m}},e.path.isBBoxIntersect=h,e.path.intersection=g,e.path.intersectionNumber=M,e.path.isPointInside=L,e.path.getBBox=k,e.path.get=$,e.path.toRelative=x,e.path.toAbsolute=T,e.path.toCubic=O,e.path.map=P,e.path.toString=i,e.path.clone=s}),a.plugin(function(e,t,n,a){var o=Math.max,i=Math.min,s=function(e){if(this.items=[],this.bindings={},this.length=0,this.type="set",e)for(var t=0,n=e.length;t',{def:r})},e.filter.blur.toString=function(){return this()},e.filter.shadow=function(t,n,r,a,o){return null==o&&(null==a?(o=r,r=4,a="#000"):(o=a,a=r,r=4)),null==r&&(r=4),null==o&&(o=1),null==t&&(t=0,n=2),null==n&&(n=t),a=e.color(a),e.format('',{color:a,dx:t,dy:n,blur:r,opacity:o})},e.filter.shadow.toString=function(){return this()},e.filter.grayscale=function(t){return null==t&&(t=1),e.format('',{a:.2126+.7874*(1-t),b:.7152-.7152*(1-t),c:.0722-.0722*(1-t),d:.2126-.2126*(1-t),e:.7152+.2848*(1-t),f:.0722-.0722*(1-t),g:.2126-.2126*(1-t),h:.0722+.9278*(1-t)})},e.filter.grayscale.toString=function(){return this()},e.filter.sepia=function(t){return null==t&&(t=1),e.format('',{a:.393+.607*(1-t),b:.769-.769*(1-t),c:.189-.189*(1-t),d:.349-.349*(1-t),e:.686+.314*(1-t),f:.168-.168*(1-t),g:.272-.272*(1-t),h:.534-.534*(1-t),i:.131+.869*(1-t)})},e.filter.sepia.toString=function(){return this()},e.filter.saturate=function(t){return null==t&&(t=1),e.format('',{amount:1-t})},e.filter.saturate.toString=function(){return this()},e.filter.hueRotate=function(t){return t=t||0,e.format('',{angle:t})},e.filter.hueRotate.toString=function(){return this()},e.filter.invert=function(t){return null==t&&(t=1),e.format('',{amount:t,amount2:1-t})},e.filter.invert.toString=function(){return this()},e.filter.brightness=function(t){return null==t&&(t=1),e.format('',{amount:t})},e.filter.brightness.toString=function(){return this()},e.filter.contrast=function(t){return null==t&&(t=1),e.format('',{amount:t,amount2:.5-t/2})},e.filter.contrast.toString=function(){return this()}}),a.plugin(function(e,t,n,r,a){var o=e._.box,i=e.is,s=/^[^a-z]*([tbmlrc])/i,u=function(){return"T"+this.dx+","+this.dy};t.prototype.getAlign=function(e,t){null==t&&i(e,"string")&&(t=e,e=null),e=e||this.paper;var n=e.getBBox?e.getBBox():o(e),r=this.getBBox(),a={};switch(t=t&&t.match(s),t=t?t[1].toLowerCase():"c"){case"t":a.dx=0,a.dy=n.y-r.y;break;case"b":a.dx=0,a.dy=n.y2-r.y2;break;case"m":a.dx=0,a.dy=n.cy-r.cy;break;case"l":a.dx=n.x-r.x,a.dy=0;break;case"r":a.dx=n.x2-r.x2,a.dy=0;break;default:a.dx=n.cx-r.cx,a.dy=0}return a.toString=u,a},t.prototype.align=function(e,t){return this.transform("..."+this.getAlign(e,t))}}),a.plugin(function(e,t,n,a,o){function i(e,t,n){return function(r){var a=r.slice(e,t);return 1==a.length&&(a=a[0]),n?n(a):a}}var s=t.prototype,u=e.is,l=String,d="hasOwnProperty",c=function(e,t,n,a){"function"!=typeof n||n.length||(a=n,n=r.linear),this.attr=e,this.dur=t,n&&(this.easing=n),a&&(this.callback=a)};e._.Animation=c,e.animation=function(e,t,n,r){return new c(e,t,n,r)},s.inAnim=function(){var e=this,t=[];for(var n in e.anims)e.anims[d](n)&&!function(e){t.push({anim:new c(e._attrs,e.dur,e.easing,e._callback),mina:e,curStatus:e.status(),status:function(t){return e.status(t)},stop:function(){e.stop()}})}(e.anims[n]);return t},e.animate=function(e,t,n,a,o,i){"function"!=typeof o||o.length||(i=o,o=r.linear);var s=r.time(),u=r(e,t,s,s+a,r.time,n,o);return i&&eve.once("mina.finish."+u.id,i),u},s.stop=function(){for(var e=this.inAnim(),t=0,n=e.length;t2?i-2:0),u=2;u2&&void 0!==arguments[2]?arguments[2]:[],g=r.displayName||r.name||"Component",M=m.getType(r).propTypes,b=m.isReactComponent(r),L=Object.keys(a),k=["valueLink","checkedLink"].concat(L.map(m.defaultKey));y=m.uncontrolledPropTypes(a,M,g),(0,h.default)(b||!v.length,"[uncontrollable] stateless function components cannot pass through methods because they have no associated instances. Check component: "+g+", attempting to pass through methods: "+v.join(", ")),v=m.transform(v,function(e,t){e[t]=function(){var e;return(e=this.refs.inner)[t].apply(e,arguments)}},{});var w=(_=p=function(t){function n(){return o(this,n),i(this,t.apply(this,arguments))}return s(n,t),n.prototype.shouldComponentUpdate=function(){for(var t=arguments.length,n=Array(t),r=0;r1&&void 0!==arguments[1]?arguments[1]:{},r=arguments[2];return n(e,l({},a,t),r)},w}return n}t.__esModule=!0;var l=Object.assign||function(e){for(var t=1;t=15||0===v[0]&&v[1]>=13?e:e.type}function i(e,t){var n=u(t);return n&&!s(e,t)&&s(e,n)?e[n].value:e[t]}function s(e,t){return void 0!==e[t]}function u(e){return"value"===e?"valueLink":"checked"===e?"checkedLink":null}function l(e){return"default"+e.charAt(0).toUpperCase()+e.substr(1)}function d(e,t,n){return function(){for(var r=arguments.length,a=Array(r),o=0;o>> 0;\n\t\n\t for (var i = 0; i < len; i++) {\n\t if (i in t && fun.call(this, t[i], i, t)) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t };\n\t}\n\t\n\tfunction isValid(m) {\n\t if (m._isValid == null) {\n\t var flags = getParsingFlags(m);\n\t var parsedParts = some.call(flags.parsedDateParts, function (i) {\n\t return i != null;\n\t });\n\t var isNowValid = !isNaN(m._d.getTime()) &&\n\t flags.overflow < 0 &&\n\t !flags.empty &&\n\t !flags.invalidMonth &&\n\t !flags.invalidWeekday &&\n\t !flags.weekdayMismatch &&\n\t !flags.nullInput &&\n\t !flags.invalidFormat &&\n\t !flags.userInvalidated &&\n\t (!flags.meridiem || (flags.meridiem && parsedParts));\n\t\n\t if (m._strict) {\n\t isNowValid = isNowValid &&\n\t flags.charsLeftOver === 0 &&\n\t flags.unusedTokens.length === 0 &&\n\t flags.bigHour === undefined;\n\t }\n\t\n\t if (Object.isFrozen == null || !Object.isFrozen(m)) {\n\t m._isValid = isNowValid;\n\t }\n\t else {\n\t return isNowValid;\n\t }\n\t }\n\t return m._isValid;\n\t}\n\t\n\tfunction createInvalid (flags) {\n\t var m = createUTC(NaN);\n\t if (flags != null) {\n\t extend(getParsingFlags(m), flags);\n\t }\n\t else {\n\t getParsingFlags(m).userInvalidated = true;\n\t }\n\t\n\t return m;\n\t}\n\t\n\t// Plugins that add properties should also add the key here (null value),\n\t// so we can properly clone ourselves.\n\tvar momentProperties = hooks.momentProperties = [];\n\t\n\tfunction copyConfig(to, from) {\n\t var i, prop, val;\n\t\n\t if (!isUndefined(from._isAMomentObject)) {\n\t to._isAMomentObject = from._isAMomentObject;\n\t }\n\t if (!isUndefined(from._i)) {\n\t to._i = from._i;\n\t }\n\t if (!isUndefined(from._f)) {\n\t to._f = from._f;\n\t }\n\t if (!isUndefined(from._l)) {\n\t to._l = from._l;\n\t }\n\t if (!isUndefined(from._strict)) {\n\t to._strict = from._strict;\n\t }\n\t if (!isUndefined(from._tzm)) {\n\t to._tzm = from._tzm;\n\t }\n\t if (!isUndefined(from._isUTC)) {\n\t to._isUTC = from._isUTC;\n\t }\n\t if (!isUndefined(from._offset)) {\n\t to._offset = from._offset;\n\t }\n\t if (!isUndefined(from._pf)) {\n\t to._pf = getParsingFlags(from);\n\t }\n\t if (!isUndefined(from._locale)) {\n\t to._locale = from._locale;\n\t }\n\t\n\t if (momentProperties.length > 0) {\n\t for (i = 0; i < momentProperties.length; i++) {\n\t prop = momentProperties[i];\n\t val = from[prop];\n\t if (!isUndefined(val)) {\n\t to[prop] = val;\n\t }\n\t }\n\t }\n\t\n\t return to;\n\t}\n\t\n\tvar updateInProgress = false;\n\t\n\t// Moment prototype object\n\tfunction Moment(config) {\n\t copyConfig(this, config);\n\t this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n\t if (!this.isValid()) {\n\t this._d = new Date(NaN);\n\t }\n\t // Prevent infinite loop in case updateOffset creates new moment\n\t // objects.\n\t if (updateInProgress === false) {\n\t updateInProgress = true;\n\t hooks.updateOffset(this);\n\t updateInProgress = false;\n\t }\n\t}\n\t\n\tfunction isMoment (obj) {\n\t return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n\t}\n\t\n\tfunction absFloor (number) {\n\t if (number < 0) {\n\t // -0 -> 0\n\t return Math.ceil(number) || 0;\n\t } else {\n\t return Math.floor(number);\n\t }\n\t}\n\t\n\tfunction toInt(argumentForCoercion) {\n\t var coercedNumber = +argumentForCoercion,\n\t value = 0;\n\t\n\t if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n\t value = absFloor(coercedNumber);\n\t }\n\t\n\t return value;\n\t}\n\t\n\t// compare two arrays, return the number of differences\n\tfunction compareArrays(array1, array2, dontConvert) {\n\t var len = Math.min(array1.length, array2.length),\n\t lengthDiff = Math.abs(array1.length - array2.length),\n\t diffs = 0,\n\t i;\n\t for (i = 0; i < len; i++) {\n\t if ((dontConvert && array1[i] !== array2[i]) ||\n\t (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n\t diffs++;\n\t }\n\t }\n\t return diffs + lengthDiff;\n\t}\n\t\n\tfunction warn(msg) {\n\t if (hooks.suppressDeprecationWarnings === false &&\n\t (typeof console !== 'undefined') && console.warn) {\n\t console.warn('Deprecation warning: ' + msg);\n\t }\n\t}\n\t\n\tfunction deprecate(msg, fn) {\n\t var firstTime = true;\n\t\n\t return extend(function () {\n\t if (hooks.deprecationHandler != null) {\n\t hooks.deprecationHandler(null, msg);\n\t }\n\t if (firstTime) {\n\t var args = [];\n\t var arg;\n\t for (var i = 0; i < arguments.length; i++) {\n\t arg = '';\n\t if (typeof arguments[i] === 'object') {\n\t arg += '\\n[' + i + '] ';\n\t for (var key in arguments[0]) {\n\t arg += key + ': ' + arguments[0][key] + ', ';\n\t }\n\t arg = arg.slice(0, -2); // Remove trailing comma and space\n\t } else {\n\t arg = arguments[i];\n\t }\n\t args.push(arg);\n\t }\n\t warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n\t firstTime = false;\n\t }\n\t return fn.apply(this, arguments);\n\t }, fn);\n\t}\n\t\n\tvar deprecations = {};\n\t\n\tfunction deprecateSimple(name, msg) {\n\t if (hooks.deprecationHandler != null) {\n\t hooks.deprecationHandler(name, msg);\n\t }\n\t if (!deprecations[name]) {\n\t warn(msg);\n\t deprecations[name] = true;\n\t }\n\t}\n\t\n\thooks.suppressDeprecationWarnings = false;\n\thooks.deprecationHandler = null;\n\t\n\tfunction isFunction(input) {\n\t return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n\t}\n\t\n\tfunction set (config) {\n\t var prop, i;\n\t for (i in config) {\n\t prop = config[i];\n\t if (isFunction(prop)) {\n\t this[i] = prop;\n\t } else {\n\t this['_' + i] = prop;\n\t }\n\t }\n\t this._config = config;\n\t // Lenient ordinal parsing accepts just a number in addition to\n\t // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n\t // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t this._dayOfMonthOrdinalParseLenient = new RegExp(\n\t (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n\t '|' + (/\\d{1,2}/).source);\n\t}\n\t\n\tfunction mergeConfigs(parentConfig, childConfig) {\n\t var res = extend({}, parentConfig), prop;\n\t for (prop in childConfig) {\n\t if (hasOwnProp(childConfig, prop)) {\n\t if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n\t res[prop] = {};\n\t extend(res[prop], parentConfig[prop]);\n\t extend(res[prop], childConfig[prop]);\n\t } else if (childConfig[prop] != null) {\n\t res[prop] = childConfig[prop];\n\t } else {\n\t delete res[prop];\n\t }\n\t }\n\t }\n\t for (prop in parentConfig) {\n\t if (hasOwnProp(parentConfig, prop) &&\n\t !hasOwnProp(childConfig, prop) &&\n\t isObject(parentConfig[prop])) {\n\t // make sure changes to properties don't modify parent config\n\t res[prop] = extend({}, res[prop]);\n\t }\n\t }\n\t return res;\n\t}\n\t\n\tfunction Locale(config) {\n\t if (config != null) {\n\t this.set(config);\n\t }\n\t}\n\t\n\tvar keys;\n\t\n\tif (Object.keys) {\n\t keys = Object.keys;\n\t} else {\n\t keys = function (obj) {\n\t var i, res = [];\n\t for (i in obj) {\n\t if (hasOwnProp(obj, i)) {\n\t res.push(i);\n\t }\n\t }\n\t return res;\n\t };\n\t}\n\t\n\tvar defaultCalendar = {\n\t sameDay : '[Today at] LT',\n\t nextDay : '[Tomorrow at] LT',\n\t nextWeek : 'dddd [at] LT',\n\t lastDay : '[Yesterday at] LT',\n\t lastWeek : '[Last] dddd [at] LT',\n\t sameElse : 'L'\n\t};\n\t\n\tfunction calendar (key, mom, now) {\n\t var output = this._calendar[key] || this._calendar['sameElse'];\n\t return isFunction(output) ? output.call(mom, now) : output;\n\t}\n\t\n\tvar defaultLongDateFormat = {\n\t LTS : 'h:mm:ss A',\n\t LT : 'h:mm A',\n\t L : 'MM/DD/YYYY',\n\t LL : 'MMMM D, YYYY',\n\t LLL : 'MMMM D, YYYY h:mm A',\n\t LLLL : 'dddd, MMMM D, YYYY h:mm A'\n\t};\n\t\n\tfunction longDateFormat (key) {\n\t var format = this._longDateFormat[key],\n\t formatUpper = this._longDateFormat[key.toUpperCase()];\n\t\n\t if (format || !formatUpper) {\n\t return format;\n\t }\n\t\n\t this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n\t return val.slice(1);\n\t });\n\t\n\t return this._longDateFormat[key];\n\t}\n\t\n\tvar defaultInvalidDate = 'Invalid date';\n\t\n\tfunction invalidDate () {\n\t return this._invalidDate;\n\t}\n\t\n\tvar defaultOrdinal = '%d';\n\tvar defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\t\n\tfunction ordinal (number) {\n\t return this._ordinal.replace('%d', number);\n\t}\n\t\n\tvar defaultRelativeTime = {\n\t future : 'in %s',\n\t past : '%s ago',\n\t s : 'a few seconds',\n\t ss : '%d seconds',\n\t m : 'a minute',\n\t mm : '%d minutes',\n\t h : 'an hour',\n\t hh : '%d hours',\n\t d : 'a day',\n\t dd : '%d days',\n\t M : 'a month',\n\t MM : '%d months',\n\t y : 'a year',\n\t yy : '%d years'\n\t};\n\t\n\tfunction relativeTime (number, withoutSuffix, string, isFuture) {\n\t var output = this._relativeTime[string];\n\t return (isFunction(output)) ?\n\t output(number, withoutSuffix, string, isFuture) :\n\t output.replace(/%d/i, number);\n\t}\n\t\n\tfunction pastFuture (diff, output) {\n\t var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n\t return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n\t}\n\t\n\tvar aliases = {};\n\t\n\tfunction addUnitAlias (unit, shorthand) {\n\t var lowerCase = unit.toLowerCase();\n\t aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n\t}\n\t\n\tfunction normalizeUnits(units) {\n\t return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n\t}\n\t\n\tfunction normalizeObjectUnits(inputObject) {\n\t var normalizedInput = {},\n\t normalizedProp,\n\t prop;\n\t\n\t for (prop in inputObject) {\n\t if (hasOwnProp(inputObject, prop)) {\n\t normalizedProp = normalizeUnits(prop);\n\t if (normalizedProp) {\n\t normalizedInput[normalizedProp] = inputObject[prop];\n\t }\n\t }\n\t }\n\t\n\t return normalizedInput;\n\t}\n\t\n\tvar priorities = {};\n\t\n\tfunction addUnitPriority(unit, priority) {\n\t priorities[unit] = priority;\n\t}\n\t\n\tfunction getPrioritizedUnits(unitsObj) {\n\t var units = [];\n\t for (var u in unitsObj) {\n\t units.push({unit: u, priority: priorities[u]});\n\t }\n\t units.sort(function (a, b) {\n\t return a.priority - b.priority;\n\t });\n\t return units;\n\t}\n\t\n\tfunction zeroFill(number, targetLength, forceSign) {\n\t var absNumber = '' + Math.abs(number),\n\t zerosToFill = targetLength - absNumber.length,\n\t sign = number >= 0;\n\t return (sign ? (forceSign ? '+' : '') : '-') +\n\t Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n\t}\n\t\n\tvar formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\t\n\tvar localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\t\n\tvar formatFunctions = {};\n\t\n\tvar formatTokenFunctions = {};\n\t\n\t// token: 'M'\n\t// padded: ['MM', 2]\n\t// ordinal: 'Mo'\n\t// callback: function () { this.month() + 1 }\n\tfunction addFormatToken (token, padded, ordinal, callback) {\n\t var func = callback;\n\t if (typeof callback === 'string') {\n\t func = function () {\n\t return this[callback]();\n\t };\n\t }\n\t if (token) {\n\t formatTokenFunctions[token] = func;\n\t }\n\t if (padded) {\n\t formatTokenFunctions[padded[0]] = function () {\n\t return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n\t };\n\t }\n\t if (ordinal) {\n\t formatTokenFunctions[ordinal] = function () {\n\t return this.localeData().ordinal(func.apply(this, arguments), token);\n\t };\n\t }\n\t}\n\t\n\tfunction removeFormattingTokens(input) {\n\t if (input.match(/\\[[\\s\\S]/)) {\n\t return input.replace(/^\\[|\\]$/g, '');\n\t }\n\t return input.replace(/\\\\/g, '');\n\t}\n\t\n\tfunction makeFormatFunction(format) {\n\t var array = format.match(formattingTokens), i, length;\n\t\n\t for (i = 0, length = array.length; i < length; i++) {\n\t if (formatTokenFunctions[array[i]]) {\n\t array[i] = formatTokenFunctions[array[i]];\n\t } else {\n\t array[i] = removeFormattingTokens(array[i]);\n\t }\n\t }\n\t\n\t return function (mom) {\n\t var output = '', i;\n\t for (i = 0; i < length; i++) {\n\t output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n\t }\n\t return output;\n\t };\n\t}\n\t\n\t// format date using native date object\n\tfunction formatMoment(m, format) {\n\t if (!m.isValid()) {\n\t return m.localeData().invalidDate();\n\t }\n\t\n\t format = expandFormat(format, m.localeData());\n\t formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\t\n\t return formatFunctions[format](m);\n\t}\n\t\n\tfunction expandFormat(format, locale) {\n\t var i = 5;\n\t\n\t function replaceLongDateFormatTokens(input) {\n\t return locale.longDateFormat(input) || input;\n\t }\n\t\n\t localFormattingTokens.lastIndex = 0;\n\t while (i >= 0 && localFormattingTokens.test(format)) {\n\t format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n\t localFormattingTokens.lastIndex = 0;\n\t i -= 1;\n\t }\n\t\n\t return format;\n\t}\n\t\n\tvar match1 = /\\d/; // 0 - 9\n\tvar match2 = /\\d\\d/; // 00 - 99\n\tvar match3 = /\\d{3}/; // 000 - 999\n\tvar match4 = /\\d{4}/; // 0000 - 9999\n\tvar match6 = /[+-]?\\d{6}/; // -999999 - 999999\n\tvar match1to2 = /\\d\\d?/; // 0 - 99\n\tvar match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n\tvar match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n\tvar match1to3 = /\\d{1,3}/; // 0 - 999\n\tvar match1to4 = /\\d{1,4}/; // 0 - 9999\n\tvar match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\t\n\tvar matchUnsigned = /\\d+/; // 0 - inf\n\tvar matchSigned = /[+-]?\\d+/; // -inf - inf\n\t\n\tvar matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\tvar matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\t\n\tvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\t\n\t// any word (or two) characters or numbers including two/three word month in arabic.\n\t// includes scottish gaelic two word and hyphenated months\n\tvar matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\t\n\t\n\tvar regexes = {};\n\t\n\tfunction addRegexToken (token, regex, strictRegex) {\n\t regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n\t return (isStrict && strictRegex) ? strictRegex : regex;\n\t };\n\t}\n\t\n\tfunction getParseRegexForToken (token, config) {\n\t if (!hasOwnProp(regexes, token)) {\n\t return new RegExp(unescapeFormat(token));\n\t }\n\t\n\t return regexes[token](config._strict, config._locale);\n\t}\n\t\n\t// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n\tfunction unescapeFormat(s) {\n\t return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n\t return p1 || p2 || p3 || p4;\n\t }));\n\t}\n\t\n\tfunction regexEscape(s) {\n\t return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t}\n\t\n\tvar tokens = {};\n\t\n\tfunction addParseToken (token, callback) {\n\t var i, func = callback;\n\t if (typeof token === 'string') {\n\t token = [token];\n\t }\n\t if (isNumber(callback)) {\n\t func = function (input, array) {\n\t array[callback] = toInt(input);\n\t };\n\t }\n\t for (i = 0; i < token.length; i++) {\n\t tokens[token[i]] = func;\n\t }\n\t}\n\t\n\tfunction addWeekParseToken (token, callback) {\n\t addParseToken(token, function (input, array, config, token) {\n\t config._w = config._w || {};\n\t callback(input, config._w, config, token);\n\t });\n\t}\n\t\n\tfunction addTimeToArrayFromToken(token, input, config) {\n\t if (input != null && hasOwnProp(tokens, token)) {\n\t tokens[token](input, config._a, config, token);\n\t }\n\t}\n\t\n\tvar YEAR = 0;\n\tvar MONTH = 1;\n\tvar DATE = 2;\n\tvar HOUR = 3;\n\tvar MINUTE = 4;\n\tvar SECOND = 5;\n\tvar MILLISECOND = 6;\n\tvar WEEK = 7;\n\tvar WEEKDAY = 8;\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('Y', 0, 0, function () {\n\t var y = this.year();\n\t return y <= 9999 ? '' + y : '+' + y;\n\t});\n\t\n\taddFormatToken(0, ['YY', 2], 0, function () {\n\t return this.year() % 100;\n\t});\n\t\n\taddFormatToken(0, ['YYYY', 4], 0, 'year');\n\taddFormatToken(0, ['YYYYY', 5], 0, 'year');\n\taddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('year', 'y');\n\t\n\t// PRIORITIES\n\t\n\taddUnitPriority('year', 1);\n\t\n\t// PARSING\n\t\n\taddRegexToken('Y', matchSigned);\n\taddRegexToken('YY', match1to2, match2);\n\taddRegexToken('YYYY', match1to4, match4);\n\taddRegexToken('YYYYY', match1to6, match6);\n\taddRegexToken('YYYYYY', match1to6, match6);\n\t\n\taddParseToken(['YYYYY', 'YYYYYY'], YEAR);\n\taddParseToken('YYYY', function (input, array) {\n\t array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n\t});\n\taddParseToken('YY', function (input, array) {\n\t array[YEAR] = hooks.parseTwoDigitYear(input);\n\t});\n\taddParseToken('Y', function (input, array) {\n\t array[YEAR] = parseInt(input, 10);\n\t});\n\t\n\t// HELPERS\n\t\n\tfunction daysInYear(year) {\n\t return isLeapYear(year) ? 366 : 365;\n\t}\n\t\n\tfunction isLeapYear(year) {\n\t return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n\t}\n\t\n\t// HOOKS\n\t\n\thooks.parseTwoDigitYear = function (input) {\n\t return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n\t};\n\t\n\t// MOMENTS\n\t\n\tvar getSetYear = makeGetSet('FullYear', true);\n\t\n\tfunction getIsLeapYear () {\n\t return isLeapYear(this.year());\n\t}\n\t\n\tfunction makeGetSet (unit, keepTime) {\n\t return function (value) {\n\t if (value != null) {\n\t set$1(this, unit, value);\n\t hooks.updateOffset(this, keepTime);\n\t return this;\n\t } else {\n\t return get(this, unit);\n\t }\n\t };\n\t}\n\t\n\tfunction get (mom, unit) {\n\t return mom.isValid() ?\n\t mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n\t}\n\t\n\tfunction set$1 (mom, unit, value) {\n\t if (mom.isValid() && !isNaN(value)) {\n\t if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n\t mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n\t }\n\t else {\n\t mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n\t }\n\t }\n\t}\n\t\n\t// MOMENTS\n\t\n\tfunction stringGet (units) {\n\t units = normalizeUnits(units);\n\t if (isFunction(this[units])) {\n\t return this[units]();\n\t }\n\t return this;\n\t}\n\t\n\t\n\tfunction stringSet (units, value) {\n\t if (typeof units === 'object') {\n\t units = normalizeObjectUnits(units);\n\t var prioritized = getPrioritizedUnits(units);\n\t for (var i = 0; i < prioritized.length; i++) {\n\t this[prioritized[i].unit](units[prioritized[i].unit]);\n\t }\n\t } else {\n\t units = normalizeUnits(units);\n\t if (isFunction(this[units])) {\n\t return this[units](value);\n\t }\n\t }\n\t return this;\n\t}\n\t\n\tfunction mod(n, x) {\n\t return ((n % x) + x) % x;\n\t}\n\t\n\tvar indexOf;\n\t\n\tif (Array.prototype.indexOf) {\n\t indexOf = Array.prototype.indexOf;\n\t} else {\n\t indexOf = function (o) {\n\t // I know\n\t var i;\n\t for (i = 0; i < this.length; ++i) {\n\t if (this[i] === o) {\n\t return i;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tfunction daysInMonth(year, month) {\n\t if (isNaN(year) || isNaN(month)) {\n\t return NaN;\n\t }\n\t var modMonth = mod(month, 12);\n\t year += (month - modMonth) / 12;\n\t return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('M', ['MM', 2], 'Mo', function () {\n\t return this.month() + 1;\n\t});\n\t\n\taddFormatToken('MMM', 0, 0, function (format) {\n\t return this.localeData().monthsShort(this, format);\n\t});\n\t\n\taddFormatToken('MMMM', 0, 0, function (format) {\n\t return this.localeData().months(this, format);\n\t});\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('month', 'M');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('month', 8);\n\t\n\t// PARSING\n\t\n\taddRegexToken('M', match1to2);\n\taddRegexToken('MM', match1to2, match2);\n\taddRegexToken('MMM', function (isStrict, locale) {\n\t return locale.monthsShortRegex(isStrict);\n\t});\n\taddRegexToken('MMMM', function (isStrict, locale) {\n\t return locale.monthsRegex(isStrict);\n\t});\n\t\n\taddParseToken(['M', 'MM'], function (input, array) {\n\t array[MONTH] = toInt(input) - 1;\n\t});\n\t\n\taddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n\t var month = config._locale.monthsParse(input, token, config._strict);\n\t // if we didn't find a month name, mark the date as invalid.\n\t if (month != null) {\n\t array[MONTH] = month;\n\t } else {\n\t getParsingFlags(config).invalidMonth = input;\n\t }\n\t});\n\t\n\t// LOCALES\n\t\n\tvar MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n\tvar defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n\tfunction localeMonths (m, format) {\n\t if (!m) {\n\t return isArray(this._months) ? this._months :\n\t this._months['standalone'];\n\t }\n\t return isArray(this._months) ? this._months[m.month()] :\n\t this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n\t}\n\t\n\tvar defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n\tfunction localeMonthsShort (m, format) {\n\t if (!m) {\n\t return isArray(this._monthsShort) ? this._monthsShort :\n\t this._monthsShort['standalone'];\n\t }\n\t return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n\t this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n\t}\n\t\n\tfunction handleStrictParse(monthName, format, strict) {\n\t var i, ii, mom, llc = monthName.toLocaleLowerCase();\n\t if (!this._monthsParse) {\n\t // this is not used\n\t this._monthsParse = [];\n\t this._longMonthsParse = [];\n\t this._shortMonthsParse = [];\n\t for (i = 0; i < 12; ++i) {\n\t mom = createUTC([2000, i]);\n\t this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n\t this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n\t }\n\t }\n\t\n\t if (strict) {\n\t if (format === 'MMM') {\n\t ii = indexOf.call(this._shortMonthsParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else {\n\t ii = indexOf.call(this._longMonthsParse, llc);\n\t return ii !== -1 ? ii : null;\n\t }\n\t } else {\n\t if (format === 'MMM') {\n\t ii = indexOf.call(this._shortMonthsParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf.call(this._longMonthsParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else {\n\t ii = indexOf.call(this._longMonthsParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf.call(this._shortMonthsParse, llc);\n\t return ii !== -1 ? ii : null;\n\t }\n\t }\n\t}\n\t\n\tfunction localeMonthsParse (monthName, format, strict) {\n\t var i, mom, regex;\n\t\n\t if (this._monthsParseExact) {\n\t return handleStrictParse.call(this, monthName, format, strict);\n\t }\n\t\n\t if (!this._monthsParse) {\n\t this._monthsParse = [];\n\t this._longMonthsParse = [];\n\t this._shortMonthsParse = [];\n\t }\n\t\n\t // TODO: add sorting\n\t // Sorting makes sure if one month (or abbr) is a prefix of another\n\t // see sorting in computeMonthsParse\n\t for (i = 0; i < 12; i++) {\n\t // make the regex if we don't have it already\n\t mom = createUTC([2000, i]);\n\t if (strict && !this._longMonthsParse[i]) {\n\t this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n\t this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n\t }\n\t if (!strict && !this._monthsParse[i]) {\n\t regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n\t this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t }\n\t // test the regex\n\t if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n\t return i;\n\t } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n\t return i;\n\t } else if (!strict && this._monthsParse[i].test(monthName)) {\n\t return i;\n\t }\n\t }\n\t}\n\t\n\t// MOMENTS\n\t\n\tfunction setMonth (mom, value) {\n\t var dayOfMonth;\n\t\n\t if (!mom.isValid()) {\n\t // No op\n\t return mom;\n\t }\n\t\n\t if (typeof value === 'string') {\n\t if (/^\\d+$/.test(value)) {\n\t value = toInt(value);\n\t } else {\n\t value = mom.localeData().monthsParse(value);\n\t // TODO: Another silent failure?\n\t if (!isNumber(value)) {\n\t return mom;\n\t }\n\t }\n\t }\n\t\n\t dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n\t mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n\t return mom;\n\t}\n\t\n\tfunction getSetMonth (value) {\n\t if (value != null) {\n\t setMonth(this, value);\n\t hooks.updateOffset(this, true);\n\t return this;\n\t } else {\n\t return get(this, 'Month');\n\t }\n\t}\n\t\n\tfunction getDaysInMonth () {\n\t return daysInMonth(this.year(), this.month());\n\t}\n\t\n\tvar defaultMonthsShortRegex = matchWord;\n\tfunction monthsShortRegex (isStrict) {\n\t if (this._monthsParseExact) {\n\t if (!hasOwnProp(this, '_monthsRegex')) {\n\t computeMonthsParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._monthsShortStrictRegex;\n\t } else {\n\t return this._monthsShortRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_monthsShortRegex')) {\n\t this._monthsShortRegex = defaultMonthsShortRegex;\n\t }\n\t return this._monthsShortStrictRegex && isStrict ?\n\t this._monthsShortStrictRegex : this._monthsShortRegex;\n\t }\n\t}\n\t\n\tvar defaultMonthsRegex = matchWord;\n\tfunction monthsRegex (isStrict) {\n\t if (this._monthsParseExact) {\n\t if (!hasOwnProp(this, '_monthsRegex')) {\n\t computeMonthsParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._monthsStrictRegex;\n\t } else {\n\t return this._monthsRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_monthsRegex')) {\n\t this._monthsRegex = defaultMonthsRegex;\n\t }\n\t return this._monthsStrictRegex && isStrict ?\n\t this._monthsStrictRegex : this._monthsRegex;\n\t }\n\t}\n\t\n\tfunction computeMonthsParse () {\n\t function cmpLenRev(a, b) {\n\t return b.length - a.length;\n\t }\n\t\n\t var shortPieces = [], longPieces = [], mixedPieces = [],\n\t i, mom;\n\t for (i = 0; i < 12; i++) {\n\t // make the regex if we don't have it already\n\t mom = createUTC([2000, i]);\n\t shortPieces.push(this.monthsShort(mom, ''));\n\t longPieces.push(this.months(mom, ''));\n\t mixedPieces.push(this.months(mom, ''));\n\t mixedPieces.push(this.monthsShort(mom, ''));\n\t }\n\t // Sorting makes sure if one month (or abbr) is a prefix of another it\n\t // will match the longer piece.\n\t shortPieces.sort(cmpLenRev);\n\t longPieces.sort(cmpLenRev);\n\t mixedPieces.sort(cmpLenRev);\n\t for (i = 0; i < 12; i++) {\n\t shortPieces[i] = regexEscape(shortPieces[i]);\n\t longPieces[i] = regexEscape(longPieces[i]);\n\t }\n\t for (i = 0; i < 24; i++) {\n\t mixedPieces[i] = regexEscape(mixedPieces[i]);\n\t }\n\t\n\t this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t this._monthsShortRegex = this._monthsRegex;\n\t this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n\t this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n\t}\n\t\n\tfunction createDate (y, m, d, h, M, s, ms) {\n\t // can't just apply() to create a date:\n\t // https://stackoverflow.com/q/181348\n\t var date = new Date(y, m, d, h, M, s, ms);\n\t\n\t // the date constructor remaps years 0-99 to 1900-1999\n\t if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n\t date.setFullYear(y);\n\t }\n\t return date;\n\t}\n\t\n\tfunction createUTCDate (y) {\n\t var date = new Date(Date.UTC.apply(null, arguments));\n\t\n\t // the Date.UTC function remaps years 0-99 to 1900-1999\n\t if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n\t date.setUTCFullYear(y);\n\t }\n\t return date;\n\t}\n\t\n\t// start-of-first-week - start-of-year\n\tfunction firstWeekOffset(year, dow, doy) {\n\t var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n\t fwd = 7 + dow - doy,\n\t // first-week day local weekday -- which local weekday is fwd\n\t fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\t\n\t return -fwdlw + fwd - 1;\n\t}\n\t\n\t// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n\tfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n\t var localWeekday = (7 + weekday - dow) % 7,\n\t weekOffset = firstWeekOffset(year, dow, doy),\n\t dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n\t resYear, resDayOfYear;\n\t\n\t if (dayOfYear <= 0) {\n\t resYear = year - 1;\n\t resDayOfYear = daysInYear(resYear) + dayOfYear;\n\t } else if (dayOfYear > daysInYear(year)) {\n\t resYear = year + 1;\n\t resDayOfYear = dayOfYear - daysInYear(year);\n\t } else {\n\t resYear = year;\n\t resDayOfYear = dayOfYear;\n\t }\n\t\n\t return {\n\t year: resYear,\n\t dayOfYear: resDayOfYear\n\t };\n\t}\n\t\n\tfunction weekOfYear(mom, dow, doy) {\n\t var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n\t week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n\t resWeek, resYear;\n\t\n\t if (week < 1) {\n\t resYear = mom.year() - 1;\n\t resWeek = week + weeksInYear(resYear, dow, doy);\n\t } else if (week > weeksInYear(mom.year(), dow, doy)) {\n\t resWeek = week - weeksInYear(mom.year(), dow, doy);\n\t resYear = mom.year() + 1;\n\t } else {\n\t resYear = mom.year();\n\t resWeek = week;\n\t }\n\t\n\t return {\n\t week: resWeek,\n\t year: resYear\n\t };\n\t}\n\t\n\tfunction weeksInYear(year, dow, doy) {\n\t var weekOffset = firstWeekOffset(year, dow, doy),\n\t weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n\t return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('w', ['ww', 2], 'wo', 'week');\n\taddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('week', 'w');\n\taddUnitAlias('isoWeek', 'W');\n\t\n\t// PRIORITIES\n\t\n\taddUnitPriority('week', 5);\n\taddUnitPriority('isoWeek', 5);\n\t\n\t// PARSING\n\t\n\taddRegexToken('w', match1to2);\n\taddRegexToken('ww', match1to2, match2);\n\taddRegexToken('W', match1to2);\n\taddRegexToken('WW', match1to2, match2);\n\t\n\taddWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n\t week[token.substr(0, 1)] = toInt(input);\n\t});\n\t\n\t// HELPERS\n\t\n\t// LOCALES\n\t\n\tfunction localeWeek (mom) {\n\t return weekOfYear(mom, this._week.dow, this._week.doy).week;\n\t}\n\t\n\tvar defaultLocaleWeek = {\n\t dow : 0, // Sunday is the first day of the week.\n\t doy : 6 // The week that contains Jan 1st is the first week of the year.\n\t};\n\t\n\tfunction localeFirstDayOfWeek () {\n\t return this._week.dow;\n\t}\n\t\n\tfunction localeFirstDayOfYear () {\n\t return this._week.doy;\n\t}\n\t\n\t// MOMENTS\n\t\n\tfunction getSetWeek (input) {\n\t var week = this.localeData().week(this);\n\t return input == null ? week : this.add((input - week) * 7, 'd');\n\t}\n\t\n\tfunction getSetISOWeek (input) {\n\t var week = weekOfYear(this, 1, 4).week;\n\t return input == null ? week : this.add((input - week) * 7, 'd');\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('d', 0, 'do', 'day');\n\t\n\taddFormatToken('dd', 0, 0, function (format) {\n\t return this.localeData().weekdaysMin(this, format);\n\t});\n\t\n\taddFormatToken('ddd', 0, 0, function (format) {\n\t return this.localeData().weekdaysShort(this, format);\n\t});\n\t\n\taddFormatToken('dddd', 0, 0, function (format) {\n\t return this.localeData().weekdays(this, format);\n\t});\n\t\n\taddFormatToken('e', 0, 0, 'weekday');\n\taddFormatToken('E', 0, 0, 'isoWeekday');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('day', 'd');\n\taddUnitAlias('weekday', 'e');\n\taddUnitAlias('isoWeekday', 'E');\n\t\n\t// PRIORITY\n\taddUnitPriority('day', 11);\n\taddUnitPriority('weekday', 11);\n\taddUnitPriority('isoWeekday', 11);\n\t\n\t// PARSING\n\t\n\taddRegexToken('d', match1to2);\n\taddRegexToken('e', match1to2);\n\taddRegexToken('E', match1to2);\n\taddRegexToken('dd', function (isStrict, locale) {\n\t return locale.weekdaysMinRegex(isStrict);\n\t});\n\taddRegexToken('ddd', function (isStrict, locale) {\n\t return locale.weekdaysShortRegex(isStrict);\n\t});\n\taddRegexToken('dddd', function (isStrict, locale) {\n\t return locale.weekdaysRegex(isStrict);\n\t});\n\t\n\taddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n\t var weekday = config._locale.weekdaysParse(input, token, config._strict);\n\t // if we didn't get a weekday name, mark the date as invalid\n\t if (weekday != null) {\n\t week.d = weekday;\n\t } else {\n\t getParsingFlags(config).invalidWeekday = input;\n\t }\n\t});\n\t\n\taddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n\t week[token] = toInt(input);\n\t});\n\t\n\t// HELPERS\n\t\n\tfunction parseWeekday(input, locale) {\n\t if (typeof input !== 'string') {\n\t return input;\n\t }\n\t\n\t if (!isNaN(input)) {\n\t return parseInt(input, 10);\n\t }\n\t\n\t input = locale.weekdaysParse(input);\n\t if (typeof input === 'number') {\n\t return input;\n\t }\n\t\n\t return null;\n\t}\n\t\n\tfunction parseIsoWeekday(input, locale) {\n\t if (typeof input === 'string') {\n\t return locale.weekdaysParse(input) % 7 || 7;\n\t }\n\t return isNaN(input) ? null : input;\n\t}\n\t\n\t// LOCALES\n\t\n\tvar defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n\tfunction localeWeekdays (m, format) {\n\t if (!m) {\n\t return isArray(this._weekdays) ? this._weekdays :\n\t this._weekdays['standalone'];\n\t }\n\t return isArray(this._weekdays) ? this._weekdays[m.day()] :\n\t this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n\t}\n\t\n\tvar defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n\tfunction localeWeekdaysShort (m) {\n\t return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n\t}\n\t\n\tvar defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n\tfunction localeWeekdaysMin (m) {\n\t return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n\t}\n\t\n\tfunction handleStrictParse$1(weekdayName, format, strict) {\n\t var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n\t if (!this._weekdaysParse) {\n\t this._weekdaysParse = [];\n\t this._shortWeekdaysParse = [];\n\t this._minWeekdaysParse = [];\n\t\n\t for (i = 0; i < 7; ++i) {\n\t mom = createUTC([2000, 1]).day(i);\n\t this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n\t this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n\t this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n\t }\n\t }\n\t\n\t if (strict) {\n\t if (format === 'dddd') {\n\t ii = indexOf.call(this._weekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else if (format === 'ddd') {\n\t ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else {\n\t ii = indexOf.call(this._minWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t }\n\t } else {\n\t if (format === 'dddd') {\n\t ii = indexOf.call(this._weekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf.call(this._minWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else if (format === 'ddd') {\n\t ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf.call(this._weekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf.call(this._minWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else {\n\t ii = indexOf.call(this._minWeekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf.call(this._weekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf.call(this._shortWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t }\n\t }\n\t}\n\t\n\tfunction localeWeekdaysParse (weekdayName, format, strict) {\n\t var i, mom, regex;\n\t\n\t if (this._weekdaysParseExact) {\n\t return handleStrictParse$1.call(this, weekdayName, format, strict);\n\t }\n\t\n\t if (!this._weekdaysParse) {\n\t this._weekdaysParse = [];\n\t this._minWeekdaysParse = [];\n\t this._shortWeekdaysParse = [];\n\t this._fullWeekdaysParse = [];\n\t }\n\t\n\t for (i = 0; i < 7; i++) {\n\t // make the regex if we don't have it already\n\t\n\t mom = createUTC([2000, 1]).day(i);\n\t if (strict && !this._fullWeekdaysParse[i]) {\n\t this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n\t this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n\t this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n\t }\n\t if (!this._weekdaysParse[i]) {\n\t regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n\t this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t }\n\t // test the regex\n\t if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n\t return i;\n\t } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n\t return i;\n\t } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n\t return i;\n\t } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n\t return i;\n\t }\n\t }\n\t}\n\t\n\t// MOMENTS\n\t\n\tfunction getSetDayOfWeek (input) {\n\t if (!this.isValid()) {\n\t return input != null ? this : NaN;\n\t }\n\t var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n\t if (input != null) {\n\t input = parseWeekday(input, this.localeData());\n\t return this.add(input - day, 'd');\n\t } else {\n\t return day;\n\t }\n\t}\n\t\n\tfunction getSetLocaleDayOfWeek (input) {\n\t if (!this.isValid()) {\n\t return input != null ? this : NaN;\n\t }\n\t var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n\t return input == null ? weekday : this.add(input - weekday, 'd');\n\t}\n\t\n\tfunction getSetISODayOfWeek (input) {\n\t if (!this.isValid()) {\n\t return input != null ? this : NaN;\n\t }\n\t\n\t // behaves the same as moment#day except\n\t // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n\t // as a setter, sunday should belong to the previous week.\n\t\n\t if (input != null) {\n\t var weekday = parseIsoWeekday(input, this.localeData());\n\t return this.day(this.day() % 7 ? weekday : weekday - 7);\n\t } else {\n\t return this.day() || 7;\n\t }\n\t}\n\t\n\tvar defaultWeekdaysRegex = matchWord;\n\tfunction weekdaysRegex (isStrict) {\n\t if (this._weekdaysParseExact) {\n\t if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t computeWeekdaysParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._weekdaysStrictRegex;\n\t } else {\n\t return this._weekdaysRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t this._weekdaysRegex = defaultWeekdaysRegex;\n\t }\n\t return this._weekdaysStrictRegex && isStrict ?\n\t this._weekdaysStrictRegex : this._weekdaysRegex;\n\t }\n\t}\n\t\n\tvar defaultWeekdaysShortRegex = matchWord;\n\tfunction weekdaysShortRegex (isStrict) {\n\t if (this._weekdaysParseExact) {\n\t if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t computeWeekdaysParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._weekdaysShortStrictRegex;\n\t } else {\n\t return this._weekdaysShortRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n\t this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n\t }\n\t return this._weekdaysShortStrictRegex && isStrict ?\n\t this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n\t }\n\t}\n\t\n\tvar defaultWeekdaysMinRegex = matchWord;\n\tfunction weekdaysMinRegex (isStrict) {\n\t if (this._weekdaysParseExact) {\n\t if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t computeWeekdaysParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._weekdaysMinStrictRegex;\n\t } else {\n\t return this._weekdaysMinRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n\t this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n\t }\n\t return this._weekdaysMinStrictRegex && isStrict ?\n\t this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n\t }\n\t}\n\t\n\t\n\tfunction computeWeekdaysParse () {\n\t function cmpLenRev(a, b) {\n\t return b.length - a.length;\n\t }\n\t\n\t var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n\t i, mom, minp, shortp, longp;\n\t for (i = 0; i < 7; i++) {\n\t // make the regex if we don't have it already\n\t mom = createUTC([2000, 1]).day(i);\n\t minp = this.weekdaysMin(mom, '');\n\t shortp = this.weekdaysShort(mom, '');\n\t longp = this.weekdays(mom, '');\n\t minPieces.push(minp);\n\t shortPieces.push(shortp);\n\t longPieces.push(longp);\n\t mixedPieces.push(minp);\n\t mixedPieces.push(shortp);\n\t mixedPieces.push(longp);\n\t }\n\t // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n\t // will match the longer piece.\n\t minPieces.sort(cmpLenRev);\n\t shortPieces.sort(cmpLenRev);\n\t longPieces.sort(cmpLenRev);\n\t mixedPieces.sort(cmpLenRev);\n\t for (i = 0; i < 7; i++) {\n\t shortPieces[i] = regexEscape(shortPieces[i]);\n\t longPieces[i] = regexEscape(longPieces[i]);\n\t mixedPieces[i] = regexEscape(mixedPieces[i]);\n\t }\n\t\n\t this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t this._weekdaysShortRegex = this._weekdaysRegex;\n\t this._weekdaysMinRegex = this._weekdaysRegex;\n\t\n\t this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n\t this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n\t this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n\t}\n\t\n\t// FORMATTING\n\t\n\tfunction hFormat() {\n\t return this.hours() % 12 || 12;\n\t}\n\t\n\tfunction kFormat() {\n\t return this.hours() || 24;\n\t}\n\t\n\taddFormatToken('H', ['HH', 2], 0, 'hour');\n\taddFormatToken('h', ['hh', 2], 0, hFormat);\n\taddFormatToken('k', ['kk', 2], 0, kFormat);\n\t\n\taddFormatToken('hmm', 0, 0, function () {\n\t return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n\t});\n\t\n\taddFormatToken('hmmss', 0, 0, function () {\n\t return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n\t zeroFill(this.seconds(), 2);\n\t});\n\t\n\taddFormatToken('Hmm', 0, 0, function () {\n\t return '' + this.hours() + zeroFill(this.minutes(), 2);\n\t});\n\t\n\taddFormatToken('Hmmss', 0, 0, function () {\n\t return '' + this.hours() + zeroFill(this.minutes(), 2) +\n\t zeroFill(this.seconds(), 2);\n\t});\n\t\n\tfunction meridiem (token, lowercase) {\n\t addFormatToken(token, 0, 0, function () {\n\t return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n\t });\n\t}\n\t\n\tmeridiem('a', true);\n\tmeridiem('A', false);\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('hour', 'h');\n\t\n\t// PRIORITY\n\taddUnitPriority('hour', 13);\n\t\n\t// PARSING\n\t\n\tfunction matchMeridiem (isStrict, locale) {\n\t return locale._meridiemParse;\n\t}\n\t\n\taddRegexToken('a', matchMeridiem);\n\taddRegexToken('A', matchMeridiem);\n\taddRegexToken('H', match1to2);\n\taddRegexToken('h', match1to2);\n\taddRegexToken('k', match1to2);\n\taddRegexToken('HH', match1to2, match2);\n\taddRegexToken('hh', match1to2, match2);\n\taddRegexToken('kk', match1to2, match2);\n\t\n\taddRegexToken('hmm', match3to4);\n\taddRegexToken('hmmss', match5to6);\n\taddRegexToken('Hmm', match3to4);\n\taddRegexToken('Hmmss', match5to6);\n\t\n\taddParseToken(['H', 'HH'], HOUR);\n\taddParseToken(['k', 'kk'], function (input, array, config) {\n\t var kInput = toInt(input);\n\t array[HOUR] = kInput === 24 ? 0 : kInput;\n\t});\n\taddParseToken(['a', 'A'], function (input, array, config) {\n\t config._isPm = config._locale.isPM(input);\n\t config._meridiem = input;\n\t});\n\taddParseToken(['h', 'hh'], function (input, array, config) {\n\t array[HOUR] = toInt(input);\n\t getParsingFlags(config).bigHour = true;\n\t});\n\taddParseToken('hmm', function (input, array, config) {\n\t var pos = input.length - 2;\n\t array[HOUR] = toInt(input.substr(0, pos));\n\t array[MINUTE] = toInt(input.substr(pos));\n\t getParsingFlags(config).bigHour = true;\n\t});\n\taddParseToken('hmmss', function (input, array, config) {\n\t var pos1 = input.length - 4;\n\t var pos2 = input.length - 2;\n\t array[HOUR] = toInt(input.substr(0, pos1));\n\t array[MINUTE] = toInt(input.substr(pos1, 2));\n\t array[SECOND] = toInt(input.substr(pos2));\n\t getParsingFlags(config).bigHour = true;\n\t});\n\taddParseToken('Hmm', function (input, array, config) {\n\t var pos = input.length - 2;\n\t array[HOUR] = toInt(input.substr(0, pos));\n\t array[MINUTE] = toInt(input.substr(pos));\n\t});\n\taddParseToken('Hmmss', function (input, array, config) {\n\t var pos1 = input.length - 4;\n\t var pos2 = input.length - 2;\n\t array[HOUR] = toInt(input.substr(0, pos1));\n\t array[MINUTE] = toInt(input.substr(pos1, 2));\n\t array[SECOND] = toInt(input.substr(pos2));\n\t});\n\t\n\t// LOCALES\n\t\n\tfunction localeIsPM (input) {\n\t // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n\t // Using charAt should be more compatible.\n\t return ((input + '').toLowerCase().charAt(0) === 'p');\n\t}\n\t\n\tvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n\tfunction localeMeridiem (hours, minutes, isLower) {\n\t if (hours > 11) {\n\t return isLower ? 'pm' : 'PM';\n\t } else {\n\t return isLower ? 'am' : 'AM';\n\t }\n\t}\n\t\n\t\n\t// MOMENTS\n\t\n\t// Setting the hour should keep the time, because the user explicitly\n\t// specified which hour he wants. So trying to maintain the same hour (in\n\t// a new timezone) makes sense. Adding/subtracting hours does not follow\n\t// this rule.\n\tvar getSetHour = makeGetSet('Hours', true);\n\t\n\t// months\n\t// week\n\t// weekdays\n\t// meridiem\n\tvar baseConfig = {\n\t calendar: defaultCalendar,\n\t longDateFormat: defaultLongDateFormat,\n\t invalidDate: defaultInvalidDate,\n\t ordinal: defaultOrdinal,\n\t dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n\t relativeTime: defaultRelativeTime,\n\t\n\t months: defaultLocaleMonths,\n\t monthsShort: defaultLocaleMonthsShort,\n\t\n\t week: defaultLocaleWeek,\n\t\n\t weekdays: defaultLocaleWeekdays,\n\t weekdaysMin: defaultLocaleWeekdaysMin,\n\t weekdaysShort: defaultLocaleWeekdaysShort,\n\t\n\t meridiemParse: defaultLocaleMeridiemParse\n\t};\n\t\n\t// internal storage for locale config files\n\tvar locales = {};\n\tvar localeFamilies = {};\n\tvar globalLocale;\n\t\n\tfunction normalizeLocale(key) {\n\t return key ? key.toLowerCase().replace('_', '-') : key;\n\t}\n\t\n\t// pick the locale from the array\n\t// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n\t// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n\tfunction chooseLocale(names) {\n\t var i = 0, j, next, locale, split;\n\t\n\t while (i < names.length) {\n\t split = normalizeLocale(names[i]).split('-');\n\t j = split.length;\n\t next = normalizeLocale(names[i + 1]);\n\t next = next ? next.split('-') : null;\n\t while (j > 0) {\n\t locale = loadLocale(split.slice(0, j).join('-'));\n\t if (locale) {\n\t return locale;\n\t }\n\t if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n\t //the next array item is better than a shallower substring of this one\n\t break;\n\t }\n\t j--;\n\t }\n\t i++;\n\t }\n\t return null;\n\t}\n\t\n\tfunction loadLocale(name) {\n\t var oldLocale = null;\n\t // TODO: Find a better way to register and load all the locales in Node\n\t if (!locales[name] && (typeof module !== 'undefined') &&\n\t module && module.exports) {\n\t try {\n\t oldLocale = globalLocale._abbr;\n\t var aliasedRequire = require;\n\t __webpack_require__(791)(\"./\" + name);\n\t getSetGlobalLocale(oldLocale);\n\t } catch (e) {}\n\t }\n\t return locales[name];\n\t}\n\t\n\t// This function will load locale and then set the global locale. If\n\t// no arguments are passed in, it will simply return the current global\n\t// locale key.\n\tfunction getSetGlobalLocale (key, values) {\n\t var data;\n\t if (key) {\n\t if (isUndefined(values)) {\n\t data = getLocale(key);\n\t }\n\t else {\n\t data = defineLocale(key, values);\n\t }\n\t\n\t if (data) {\n\t // moment.duration._locale = moment._locale = data;\n\t globalLocale = data;\n\t }\n\t }\n\t\n\t return globalLocale._abbr;\n\t}\n\t\n\tfunction defineLocale (name, config) {\n\t if (config !== null) {\n\t var parentConfig = baseConfig;\n\t config.abbr = name;\n\t if (locales[name] != null) {\n\t deprecateSimple('defineLocaleOverride',\n\t 'use moment.updateLocale(localeName, config) to change ' +\n\t 'an existing locale. moment.defineLocale(localeName, ' +\n\t 'config) should only be used for creating a new locale ' +\n\t 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n\t parentConfig = locales[name]._config;\n\t } else if (config.parentLocale != null) {\n\t if (locales[config.parentLocale] != null) {\n\t parentConfig = locales[config.parentLocale]._config;\n\t } else {\n\t if (!localeFamilies[config.parentLocale]) {\n\t localeFamilies[config.parentLocale] = [];\n\t }\n\t localeFamilies[config.parentLocale].push({\n\t name: name,\n\t config: config\n\t });\n\t return null;\n\t }\n\t }\n\t locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\t\n\t if (localeFamilies[name]) {\n\t localeFamilies[name].forEach(function (x) {\n\t defineLocale(x.name, x.config);\n\t });\n\t }\n\t\n\t // backwards compat for now: also set the locale\n\t // make sure we set the locale AFTER all child locales have been\n\t // created, so we won't end up with the child locale set.\n\t getSetGlobalLocale(name);\n\t\n\t\n\t return locales[name];\n\t } else {\n\t // useful for testing\n\t delete locales[name];\n\t return null;\n\t }\n\t}\n\t\n\tfunction updateLocale(name, config) {\n\t if (config != null) {\n\t var locale, tmpLocale, parentConfig = baseConfig;\n\t // MERGE\n\t tmpLocale = loadLocale(name);\n\t if (tmpLocale != null) {\n\t parentConfig = tmpLocale._config;\n\t }\n\t config = mergeConfigs(parentConfig, config);\n\t locale = new Locale(config);\n\t locale.parentLocale = locales[name];\n\t locales[name] = locale;\n\t\n\t // backwards compat for now: also set the locale\n\t getSetGlobalLocale(name);\n\t } else {\n\t // pass null for config to unupdate, useful for tests\n\t if (locales[name] != null) {\n\t if (locales[name].parentLocale != null) {\n\t locales[name] = locales[name].parentLocale;\n\t } else if (locales[name] != null) {\n\t delete locales[name];\n\t }\n\t }\n\t }\n\t return locales[name];\n\t}\n\t\n\t// returns locale data\n\tfunction getLocale (key) {\n\t var locale;\n\t\n\t if (key && key._locale && key._locale._abbr) {\n\t key = key._locale._abbr;\n\t }\n\t\n\t if (!key) {\n\t return globalLocale;\n\t }\n\t\n\t if (!isArray(key)) {\n\t //short-circuit everything else\n\t locale = loadLocale(key);\n\t if (locale) {\n\t return locale;\n\t }\n\t key = [key];\n\t }\n\t\n\t return chooseLocale(key);\n\t}\n\t\n\tfunction listLocales() {\n\t return keys(locales);\n\t}\n\t\n\tfunction checkOverflow (m) {\n\t var overflow;\n\t var a = m._a;\n\t\n\t if (a && getParsingFlags(m).overflow === -2) {\n\t overflow =\n\t a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n\t a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n\t a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n\t a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n\t a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n\t a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n\t -1;\n\t\n\t if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n\t overflow = DATE;\n\t }\n\t if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n\t overflow = WEEK;\n\t }\n\t if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n\t overflow = WEEKDAY;\n\t }\n\t\n\t getParsingFlags(m).overflow = overflow;\n\t }\n\t\n\t return m;\n\t}\n\t\n\t// Pick the first defined of two or three arguments.\n\tfunction defaults(a, b, c) {\n\t if (a != null) {\n\t return a;\n\t }\n\t if (b != null) {\n\t return b;\n\t }\n\t return c;\n\t}\n\t\n\tfunction currentDateArray(config) {\n\t // hooks is actually the exported moment object\n\t var nowValue = new Date(hooks.now());\n\t if (config._useUTC) {\n\t return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n\t }\n\t return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n\t}\n\t\n\t// convert an array to a date.\n\t// the array should mirror the parameters below\n\t// note: all values past the year are optional and will default to the lowest possible value.\n\t// [year, month, day , hour, minute, second, millisecond]\n\tfunction configFromArray (config) {\n\t var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\t\n\t if (config._d) {\n\t return;\n\t }\n\t\n\t currentDate = currentDateArray(config);\n\t\n\t //compute day of the year from weeks and weekdays\n\t if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n\t dayOfYearFromWeekInfo(config);\n\t }\n\t\n\t //if the day of the year is set, figure out what it is\n\t if (config._dayOfYear != null) {\n\t yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\t\n\t if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n\t getParsingFlags(config)._overflowDayOfYear = true;\n\t }\n\t\n\t date = createUTCDate(yearToUse, 0, config._dayOfYear);\n\t config._a[MONTH] = date.getUTCMonth();\n\t config._a[DATE] = date.getUTCDate();\n\t }\n\t\n\t // Default to current date.\n\t // * if no year, month, day of month are given, default to today\n\t // * if day of month is given, default month and year\n\t // * if month is given, default only year\n\t // * if year is given, don't default anything\n\t for (i = 0; i < 3 && config._a[i] == null; ++i) {\n\t config._a[i] = input[i] = currentDate[i];\n\t }\n\t\n\t // Zero out whatever was not defaulted, including time\n\t for (; i < 7; i++) {\n\t config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n\t }\n\t\n\t // Check for 24:00:00.000\n\t if (config._a[HOUR] === 24 &&\n\t config._a[MINUTE] === 0 &&\n\t config._a[SECOND] === 0 &&\n\t config._a[MILLISECOND] === 0) {\n\t config._nextDay = true;\n\t config._a[HOUR] = 0;\n\t }\n\t\n\t config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n\t expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\t\n\t // Apply timezone offset from input. The actual utcOffset can be changed\n\t // with parseZone.\n\t if (config._tzm != null) {\n\t config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\t }\n\t\n\t if (config._nextDay) {\n\t config._a[HOUR] = 24;\n\t }\n\t\n\t // check for mismatching day of week\n\t if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n\t getParsingFlags(config).weekdayMismatch = true;\n\t }\n\t}\n\t\n\tfunction dayOfYearFromWeekInfo(config) {\n\t var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\t\n\t w = config._w;\n\t if (w.GG != null || w.W != null || w.E != null) {\n\t dow = 1;\n\t doy = 4;\n\t\n\t // TODO: We need to take the current isoWeekYear, but that depends on\n\t // how we interpret now (local, utc, fixed offset). So create\n\t // a now version of current config (take local/utc/offset flags, and\n\t // create now).\n\t weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n\t week = defaults(w.W, 1);\n\t weekday = defaults(w.E, 1);\n\t if (weekday < 1 || weekday > 7) {\n\t weekdayOverflow = true;\n\t }\n\t } else {\n\t dow = config._locale._week.dow;\n\t doy = config._locale._week.doy;\n\t\n\t var curWeek = weekOfYear(createLocal(), dow, doy);\n\t\n\t weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\t\n\t // Default to current week.\n\t week = defaults(w.w, curWeek.week);\n\t\n\t if (w.d != null) {\n\t // weekday -- low day numbers are considered next week\n\t weekday = w.d;\n\t if (weekday < 0 || weekday > 6) {\n\t weekdayOverflow = true;\n\t }\n\t } else if (w.e != null) {\n\t // local weekday -- counting starts from begining of week\n\t weekday = w.e + dow;\n\t if (w.e < 0 || w.e > 6) {\n\t weekdayOverflow = true;\n\t }\n\t } else {\n\t // default to begining of week\n\t weekday = dow;\n\t }\n\t }\n\t if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n\t getParsingFlags(config)._overflowWeeks = true;\n\t } else if (weekdayOverflow != null) {\n\t getParsingFlags(config)._overflowWeekday = true;\n\t } else {\n\t temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n\t config._a[YEAR] = temp.year;\n\t config._dayOfYear = temp.dayOfYear;\n\t }\n\t}\n\t\n\t// iso 8601 regex\n\t// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n\tvar extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\tvar basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\t\n\tvar tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\t\n\tvar isoDates = [\n\t ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n\t ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n\t ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n\t ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n\t ['YYYY-DDD', /\\d{4}-\\d{3}/],\n\t ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n\t ['YYYYYYMMDD', /[+-]\\d{10}/],\n\t ['YYYYMMDD', /\\d{8}/],\n\t // YYYYMM is NOT allowed by the standard\n\t ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n\t ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n\t ['YYYYDDD', /\\d{7}/]\n\t];\n\t\n\t// iso time formats and regexes\n\tvar isoTimes = [\n\t ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n\t ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n\t ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n\t ['HH:mm', /\\d\\d:\\d\\d/],\n\t ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n\t ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n\t ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n\t ['HHmm', /\\d\\d\\d\\d/],\n\t ['HH', /\\d\\d/]\n\t];\n\t\n\tvar aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\t\n\t// date from iso format\n\tfunction configFromISO(config) {\n\t var i, l,\n\t string = config._i,\n\t match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n\t allowTime, dateFormat, timeFormat, tzFormat;\n\t\n\t if (match) {\n\t getParsingFlags(config).iso = true;\n\t\n\t for (i = 0, l = isoDates.length; i < l; i++) {\n\t if (isoDates[i][1].exec(match[1])) {\n\t dateFormat = isoDates[i][0];\n\t allowTime = isoDates[i][2] !== false;\n\t break;\n\t }\n\t }\n\t if (dateFormat == null) {\n\t config._isValid = false;\n\t return;\n\t }\n\t if (match[3]) {\n\t for (i = 0, l = isoTimes.length; i < l; i++) {\n\t if (isoTimes[i][1].exec(match[3])) {\n\t // match[2] should be 'T' or space\n\t timeFormat = (match[2] || ' ') + isoTimes[i][0];\n\t break;\n\t }\n\t }\n\t if (timeFormat == null) {\n\t config._isValid = false;\n\t return;\n\t }\n\t }\n\t if (!allowTime && timeFormat != null) {\n\t config._isValid = false;\n\t return;\n\t }\n\t if (match[4]) {\n\t if (tzRegex.exec(match[4])) {\n\t tzFormat = 'Z';\n\t } else {\n\t config._isValid = false;\n\t return;\n\t }\n\t }\n\t config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n\t configFromStringAndFormat(config);\n\t } else {\n\t config._isValid = false;\n\t }\n\t}\n\t\n\t// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n\tvar rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\t\n\tfunction extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n\t var result = [\n\t untruncateYear(yearStr),\n\t defaultLocaleMonthsShort.indexOf(monthStr),\n\t parseInt(dayStr, 10),\n\t parseInt(hourStr, 10),\n\t parseInt(minuteStr, 10)\n\t ];\n\t\n\t if (secondStr) {\n\t result.push(parseInt(secondStr, 10));\n\t }\n\t\n\t return result;\n\t}\n\t\n\tfunction untruncateYear(yearStr) {\n\t var year = parseInt(yearStr, 10);\n\t if (year <= 49) {\n\t return 2000 + year;\n\t } else if (year <= 999) {\n\t return 1900 + year;\n\t }\n\t return year;\n\t}\n\t\n\tfunction preprocessRFC2822(s) {\n\t // Remove comments and folding whitespace and replace multiple-spaces with a single space\n\t return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').trim();\n\t}\n\t\n\tfunction checkWeekday(weekdayStr, parsedInput, config) {\n\t if (weekdayStr) {\n\t // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n\t var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n\t weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n\t if (weekdayProvided !== weekdayActual) {\n\t getParsingFlags(config).weekdayMismatch = true;\n\t config._isValid = false;\n\t return false;\n\t }\n\t }\n\t return true;\n\t}\n\t\n\tvar obsOffsets = {\n\t UT: 0,\n\t GMT: 0,\n\t EDT: -4 * 60,\n\t EST: -5 * 60,\n\t CDT: -5 * 60,\n\t CST: -6 * 60,\n\t MDT: -6 * 60,\n\t MST: -7 * 60,\n\t PDT: -7 * 60,\n\t PST: -8 * 60\n\t};\n\t\n\tfunction calculateOffset(obsOffset, militaryOffset, numOffset) {\n\t if (obsOffset) {\n\t return obsOffsets[obsOffset];\n\t } else if (militaryOffset) {\n\t // the only allowed military tz is Z\n\t return 0;\n\t } else {\n\t var hm = parseInt(numOffset, 10);\n\t var m = hm % 100, h = (hm - m) / 100;\n\t return h * 60 + m;\n\t }\n\t}\n\t\n\t// date and time from ref 2822 format\n\tfunction configFromRFC2822(config) {\n\t var match = rfc2822.exec(preprocessRFC2822(config._i));\n\t if (match) {\n\t var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n\t if (!checkWeekday(match[1], parsedArray, config)) {\n\t return;\n\t }\n\t\n\t config._a = parsedArray;\n\t config._tzm = calculateOffset(match[8], match[9], match[10]);\n\t\n\t config._d = createUTCDate.apply(null, config._a);\n\t config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\t\n\t getParsingFlags(config).rfc2822 = true;\n\t } else {\n\t config._isValid = false;\n\t }\n\t}\n\t\n\t// date from iso format or fallback\n\tfunction configFromString(config) {\n\t var matched = aspNetJsonRegex.exec(config._i);\n\t\n\t if (matched !== null) {\n\t config._d = new Date(+matched[1]);\n\t return;\n\t }\n\t\n\t configFromISO(config);\n\t if (config._isValid === false) {\n\t delete config._isValid;\n\t } else {\n\t return;\n\t }\n\t\n\t configFromRFC2822(config);\n\t if (config._isValid === false) {\n\t delete config._isValid;\n\t } else {\n\t return;\n\t }\n\t\n\t // Final attempt, use Input Fallback\n\t hooks.createFromInputFallback(config);\n\t}\n\t\n\thooks.createFromInputFallback = deprecate(\n\t 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n\t 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n\t 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n\t 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n\t function (config) {\n\t config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n\t }\n\t);\n\t\n\t// constant that refers to the ISO standard\n\thooks.ISO_8601 = function () {};\n\t\n\t// constant that refers to the RFC 2822 form\n\thooks.RFC_2822 = function () {};\n\t\n\t// date from string and format string\n\tfunction configFromStringAndFormat(config) {\n\t // TODO: Move this to another part of the creation flow to prevent circular deps\n\t if (config._f === hooks.ISO_8601) {\n\t configFromISO(config);\n\t return;\n\t }\n\t if (config._f === hooks.RFC_2822) {\n\t configFromRFC2822(config);\n\t return;\n\t }\n\t config._a = [];\n\t getParsingFlags(config).empty = true;\n\t\n\t // This array is used to make a Date, either with `new Date` or `Date.UTC`\n\t var string = '' + config._i,\n\t i, parsedInput, tokens, token, skipped,\n\t stringLength = string.length,\n\t totalParsedInputLength = 0;\n\t\n\t tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\t\n\t for (i = 0; i < tokens.length; i++) {\n\t token = tokens[i];\n\t parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n\t // console.log('token', token, 'parsedInput', parsedInput,\n\t // 'regex', getParseRegexForToken(token, config));\n\t if (parsedInput) {\n\t skipped = string.substr(0, string.indexOf(parsedInput));\n\t if (skipped.length > 0) {\n\t getParsingFlags(config).unusedInput.push(skipped);\n\t }\n\t string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n\t totalParsedInputLength += parsedInput.length;\n\t }\n\t // don't parse if it's not a known token\n\t if (formatTokenFunctions[token]) {\n\t if (parsedInput) {\n\t getParsingFlags(config).empty = false;\n\t }\n\t else {\n\t getParsingFlags(config).unusedTokens.push(token);\n\t }\n\t addTimeToArrayFromToken(token, parsedInput, config);\n\t }\n\t else if (config._strict && !parsedInput) {\n\t getParsingFlags(config).unusedTokens.push(token);\n\t }\n\t }\n\t\n\t // add remaining unparsed input length to the string\n\t getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n\t if (string.length > 0) {\n\t getParsingFlags(config).unusedInput.push(string);\n\t }\n\t\n\t // clear _12h flag if hour is <= 12\n\t if (config._a[HOUR] <= 12 &&\n\t getParsingFlags(config).bigHour === true &&\n\t config._a[HOUR] > 0) {\n\t getParsingFlags(config).bigHour = undefined;\n\t }\n\t\n\t getParsingFlags(config).parsedDateParts = config._a.slice(0);\n\t getParsingFlags(config).meridiem = config._meridiem;\n\t // handle meridiem\n\t config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\t\n\t configFromArray(config);\n\t checkOverflow(config);\n\t}\n\t\n\t\n\tfunction meridiemFixWrap (locale, hour, meridiem) {\n\t var isPm;\n\t\n\t if (meridiem == null) {\n\t // nothing to do\n\t return hour;\n\t }\n\t if (locale.meridiemHour != null) {\n\t return locale.meridiemHour(hour, meridiem);\n\t } else if (locale.isPM != null) {\n\t // Fallback\n\t isPm = locale.isPM(meridiem);\n\t if (isPm && hour < 12) {\n\t hour += 12;\n\t }\n\t if (!isPm && hour === 12) {\n\t hour = 0;\n\t }\n\t return hour;\n\t } else {\n\t // this is not supposed to happen\n\t return hour;\n\t }\n\t}\n\t\n\t// date from string and array of format strings\n\tfunction configFromStringAndArray(config) {\n\t var tempConfig,\n\t bestMoment,\n\t\n\t scoreToBeat,\n\t i,\n\t currentScore;\n\t\n\t if (config._f.length === 0) {\n\t getParsingFlags(config).invalidFormat = true;\n\t config._d = new Date(NaN);\n\t return;\n\t }\n\t\n\t for (i = 0; i < config._f.length; i++) {\n\t currentScore = 0;\n\t tempConfig = copyConfig({}, config);\n\t if (config._useUTC != null) {\n\t tempConfig._useUTC = config._useUTC;\n\t }\n\t tempConfig._f = config._f[i];\n\t configFromStringAndFormat(tempConfig);\n\t\n\t if (!isValid(tempConfig)) {\n\t continue;\n\t }\n\t\n\t // if there is any input that was not parsed add a penalty for that format\n\t currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\t\n\t //or tokens\n\t currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\t\n\t getParsingFlags(tempConfig).score = currentScore;\n\t\n\t if (scoreToBeat == null || currentScore < scoreToBeat) {\n\t scoreToBeat = currentScore;\n\t bestMoment = tempConfig;\n\t }\n\t }\n\t\n\t extend(config, bestMoment || tempConfig);\n\t}\n\t\n\tfunction configFromObject(config) {\n\t if (config._d) {\n\t return;\n\t }\n\t\n\t var i = normalizeObjectUnits(config._i);\n\t config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n\t return obj && parseInt(obj, 10);\n\t });\n\t\n\t configFromArray(config);\n\t}\n\t\n\tfunction createFromConfig (config) {\n\t var res = new Moment(checkOverflow(prepareConfig(config)));\n\t if (res._nextDay) {\n\t // Adding is smart enough around DST\n\t res.add(1, 'd');\n\t res._nextDay = undefined;\n\t }\n\t\n\t return res;\n\t}\n\t\n\tfunction prepareConfig (config) {\n\t var input = config._i,\n\t format = config._f;\n\t\n\t config._locale = config._locale || getLocale(config._l);\n\t\n\t if (input === null || (format === undefined && input === '')) {\n\t return createInvalid({nullInput: true});\n\t }\n\t\n\t if (typeof input === 'string') {\n\t config._i = input = config._locale.preparse(input);\n\t }\n\t\n\t if (isMoment(input)) {\n\t return new Moment(checkOverflow(input));\n\t } else if (isDate(input)) {\n\t config._d = input;\n\t } else if (isArray(format)) {\n\t configFromStringAndArray(config);\n\t } else if (format) {\n\t configFromStringAndFormat(config);\n\t } else {\n\t configFromInput(config);\n\t }\n\t\n\t if (!isValid(config)) {\n\t config._d = null;\n\t }\n\t\n\t return config;\n\t}\n\t\n\tfunction configFromInput(config) {\n\t var input = config._i;\n\t if (isUndefined(input)) {\n\t config._d = new Date(hooks.now());\n\t } else if (isDate(input)) {\n\t config._d = new Date(input.valueOf());\n\t } else if (typeof input === 'string') {\n\t configFromString(config);\n\t } else if (isArray(input)) {\n\t config._a = map(input.slice(0), function (obj) {\n\t return parseInt(obj, 10);\n\t });\n\t configFromArray(config);\n\t } else if (isObject(input)) {\n\t configFromObject(config);\n\t } else if (isNumber(input)) {\n\t // from milliseconds\n\t config._d = new Date(input);\n\t } else {\n\t hooks.createFromInputFallback(config);\n\t }\n\t}\n\t\n\tfunction createLocalOrUTC (input, format, locale, strict, isUTC) {\n\t var c = {};\n\t\n\t if (locale === true || locale === false) {\n\t strict = locale;\n\t locale = undefined;\n\t }\n\t\n\t if ((isObject(input) && isObjectEmpty(input)) ||\n\t (isArray(input) && input.length === 0)) {\n\t input = undefined;\n\t }\n\t // object construction must be done this way.\n\t // https://github.com/moment/moment/issues/1423\n\t c._isAMomentObject = true;\n\t c._useUTC = c._isUTC = isUTC;\n\t c._l = locale;\n\t c._i = input;\n\t c._f = format;\n\t c._strict = strict;\n\t\n\t return createFromConfig(c);\n\t}\n\t\n\tfunction createLocal (input, format, locale, strict) {\n\t return createLocalOrUTC(input, format, locale, strict, false);\n\t}\n\t\n\tvar prototypeMin = deprecate(\n\t 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t function () {\n\t var other = createLocal.apply(null, arguments);\n\t if (this.isValid() && other.isValid()) {\n\t return other < this ? this : other;\n\t } else {\n\t return createInvalid();\n\t }\n\t }\n\t);\n\t\n\tvar prototypeMax = deprecate(\n\t 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t function () {\n\t var other = createLocal.apply(null, arguments);\n\t if (this.isValid() && other.isValid()) {\n\t return other > this ? this : other;\n\t } else {\n\t return createInvalid();\n\t }\n\t }\n\t);\n\t\n\t// Pick a moment m from moments so that m[fn](other) is true for all\n\t// other. This relies on the function fn to be transitive.\n\t//\n\t// moments should either be an array of moment objects or an array, whose\n\t// first element is an array of moment objects.\n\tfunction pickBy(fn, moments) {\n\t var res, i;\n\t if (moments.length === 1 && isArray(moments[0])) {\n\t moments = moments[0];\n\t }\n\t if (!moments.length) {\n\t return createLocal();\n\t }\n\t res = moments[0];\n\t for (i = 1; i < moments.length; ++i) {\n\t if (!moments[i].isValid() || moments[i][fn](res)) {\n\t res = moments[i];\n\t }\n\t }\n\t return res;\n\t}\n\t\n\t// TODO: Use [].sort instead?\n\tfunction min () {\n\t var args = [].slice.call(arguments, 0);\n\t\n\t return pickBy('isBefore', args);\n\t}\n\t\n\tfunction max () {\n\t var args = [].slice.call(arguments, 0);\n\t\n\t return pickBy('isAfter', args);\n\t}\n\t\n\tvar now = function () {\n\t return Date.now ? Date.now() : +(new Date());\n\t};\n\t\n\tvar ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\t\n\tfunction isDurationValid(m) {\n\t for (var key in m) {\n\t if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n\t return false;\n\t }\n\t }\n\t\n\t var unitHasDecimal = false;\n\t for (var i = 0; i < ordering.length; ++i) {\n\t if (m[ordering[i]]) {\n\t if (unitHasDecimal) {\n\t return false; // only allow non-integers for smallest unit\n\t }\n\t if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n\t unitHasDecimal = true;\n\t }\n\t }\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction isValid$1() {\n\t return this._isValid;\n\t}\n\t\n\tfunction createInvalid$1() {\n\t return createDuration(NaN);\n\t}\n\t\n\tfunction Duration (duration) {\n\t var normalizedInput = normalizeObjectUnits(duration),\n\t years = normalizedInput.year || 0,\n\t quarters = normalizedInput.quarter || 0,\n\t months = normalizedInput.month || 0,\n\t weeks = normalizedInput.week || 0,\n\t days = normalizedInput.day || 0,\n\t hours = normalizedInput.hour || 0,\n\t minutes = normalizedInput.minute || 0,\n\t seconds = normalizedInput.second || 0,\n\t milliseconds = normalizedInput.millisecond || 0;\n\t\n\t this._isValid = isDurationValid(normalizedInput);\n\t\n\t // representation for dateAddRemove\n\t this._milliseconds = +milliseconds +\n\t seconds * 1e3 + // 1000\n\t minutes * 6e4 + // 1000 * 60\n\t hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n\t // Because of dateAddRemove treats 24 hours as different from a\n\t // day when working around DST, we need to store them separately\n\t this._days = +days +\n\t weeks * 7;\n\t // It is impossible to translate months into days without knowing\n\t // which months you are are talking about, so we have to store\n\t // it separately.\n\t this._months = +months +\n\t quarters * 3 +\n\t years * 12;\n\t\n\t this._data = {};\n\t\n\t this._locale = getLocale();\n\t\n\t this._bubble();\n\t}\n\t\n\tfunction isDuration (obj) {\n\t return obj instanceof Duration;\n\t}\n\t\n\tfunction absRound (number) {\n\t if (number < 0) {\n\t return Math.round(-1 * number) * -1;\n\t } else {\n\t return Math.round(number);\n\t }\n\t}\n\t\n\t// FORMATTING\n\t\n\tfunction offset (token, separator) {\n\t addFormatToken(token, 0, 0, function () {\n\t var offset = this.utcOffset();\n\t var sign = '+';\n\t if (offset < 0) {\n\t offset = -offset;\n\t sign = '-';\n\t }\n\t return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n\t });\n\t}\n\t\n\toffset('Z', ':');\n\toffset('ZZ', '');\n\t\n\t// PARSING\n\t\n\taddRegexToken('Z', matchShortOffset);\n\taddRegexToken('ZZ', matchShortOffset);\n\taddParseToken(['Z', 'ZZ'], function (input, array, config) {\n\t config._useUTC = true;\n\t config._tzm = offsetFromString(matchShortOffset, input);\n\t});\n\t\n\t// HELPERS\n\t\n\t// timezone chunker\n\t// '+10:00' > ['10', '00']\n\t// '-1530' > ['-15', '30']\n\tvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\t\n\tfunction offsetFromString(matcher, string) {\n\t var matches = (string || '').match(matcher);\n\t\n\t if (matches === null) {\n\t return null;\n\t }\n\t\n\t var chunk = matches[matches.length - 1] || [];\n\t var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n\t var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\t\n\t return minutes === 0 ?\n\t 0 :\n\t parts[0] === '+' ? minutes : -minutes;\n\t}\n\t\n\t// Return a moment from input, that is local/utc/zone equivalent to model.\n\tfunction cloneWithOffset(input, model) {\n\t var res, diff;\n\t if (model._isUTC) {\n\t res = model.clone();\n\t diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n\t // Use low-level api, because this fn is low-level api.\n\t res._d.setTime(res._d.valueOf() + diff);\n\t hooks.updateOffset(res, false);\n\t return res;\n\t } else {\n\t return createLocal(input).local();\n\t }\n\t}\n\t\n\tfunction getDateOffset (m) {\n\t // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n\t // https://github.com/moment/moment/pull/1871\n\t return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n\t}\n\t\n\t// HOOKS\n\t\n\t// This function will be called whenever a moment is mutated.\n\t// It is intended to keep the offset in sync with the timezone.\n\thooks.updateOffset = function () {};\n\t\n\t// MOMENTS\n\t\n\t// keepLocalTime = true means only change the timezone, without\n\t// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n\t// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n\t// +0200, so we adjust the time as needed, to be valid.\n\t//\n\t// Keeping the time actually adds/subtracts (one hour)\n\t// from the actual represented time. That is why we call updateOffset\n\t// a second time. In case it wants us to change the offset again\n\t// _changeInProgress == true case, then we have to adjust, because\n\t// there is no such time in the given timezone.\n\tfunction getSetOffset (input, keepLocalTime, keepMinutes) {\n\t var offset = this._offset || 0,\n\t localAdjust;\n\t if (!this.isValid()) {\n\t return input != null ? this : NaN;\n\t }\n\t if (input != null) {\n\t if (typeof input === 'string') {\n\t input = offsetFromString(matchShortOffset, input);\n\t if (input === null) {\n\t return this;\n\t }\n\t } else if (Math.abs(input) < 16 && !keepMinutes) {\n\t input = input * 60;\n\t }\n\t if (!this._isUTC && keepLocalTime) {\n\t localAdjust = getDateOffset(this);\n\t }\n\t this._offset = input;\n\t this._isUTC = true;\n\t if (localAdjust != null) {\n\t this.add(localAdjust, 'm');\n\t }\n\t if (offset !== input) {\n\t if (!keepLocalTime || this._changeInProgress) {\n\t addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n\t } else if (!this._changeInProgress) {\n\t this._changeInProgress = true;\n\t hooks.updateOffset(this, true);\n\t this._changeInProgress = null;\n\t }\n\t }\n\t return this;\n\t } else {\n\t return this._isUTC ? offset : getDateOffset(this);\n\t }\n\t}\n\t\n\tfunction getSetZone (input, keepLocalTime) {\n\t if (input != null) {\n\t if (typeof input !== 'string') {\n\t input = -input;\n\t }\n\t\n\t this.utcOffset(input, keepLocalTime);\n\t\n\t return this;\n\t } else {\n\t return -this.utcOffset();\n\t }\n\t}\n\t\n\tfunction setOffsetToUTC (keepLocalTime) {\n\t return this.utcOffset(0, keepLocalTime);\n\t}\n\t\n\tfunction setOffsetToLocal (keepLocalTime) {\n\t if (this._isUTC) {\n\t this.utcOffset(0, keepLocalTime);\n\t this._isUTC = false;\n\t\n\t if (keepLocalTime) {\n\t this.subtract(getDateOffset(this), 'm');\n\t }\n\t }\n\t return this;\n\t}\n\t\n\tfunction setOffsetToParsedOffset () {\n\t if (this._tzm != null) {\n\t this.utcOffset(this._tzm, false, true);\n\t } else if (typeof this._i === 'string') {\n\t var tZone = offsetFromString(matchOffset, this._i);\n\t if (tZone != null) {\n\t this.utcOffset(tZone);\n\t }\n\t else {\n\t this.utcOffset(0, true);\n\t }\n\t }\n\t return this;\n\t}\n\t\n\tfunction hasAlignedHourOffset (input) {\n\t if (!this.isValid()) {\n\t return false;\n\t }\n\t input = input ? createLocal(input).utcOffset() : 0;\n\t\n\t return (this.utcOffset() - input) % 60 === 0;\n\t}\n\t\n\tfunction isDaylightSavingTime () {\n\t return (\n\t this.utcOffset() > this.clone().month(0).utcOffset() ||\n\t this.utcOffset() > this.clone().month(5).utcOffset()\n\t );\n\t}\n\t\n\tfunction isDaylightSavingTimeShifted () {\n\t if (!isUndefined(this._isDSTShifted)) {\n\t return this._isDSTShifted;\n\t }\n\t\n\t var c = {};\n\t\n\t copyConfig(c, this);\n\t c = prepareConfig(c);\n\t\n\t if (c._a) {\n\t var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n\t this._isDSTShifted = this.isValid() &&\n\t compareArrays(c._a, other.toArray()) > 0;\n\t } else {\n\t this._isDSTShifted = false;\n\t }\n\t\n\t return this._isDSTShifted;\n\t}\n\t\n\tfunction isLocal () {\n\t return this.isValid() ? !this._isUTC : false;\n\t}\n\t\n\tfunction isUtcOffset () {\n\t return this.isValid() ? this._isUTC : false;\n\t}\n\t\n\tfunction isUtc () {\n\t return this.isValid() ? this._isUTC && this._offset === 0 : false;\n\t}\n\t\n\t// ASP.NET json date format regex\n\tvar aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\t\n\t// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n\t// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n\t// and further modified to allow for strings containing both week and day\n\tvar isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\t\n\tfunction createDuration (input, key) {\n\t var duration = input,\n\t // matching against regexp is expensive, do it on demand\n\t match = null,\n\t sign,\n\t ret,\n\t diffRes;\n\t\n\t if (isDuration(input)) {\n\t duration = {\n\t ms : input._milliseconds,\n\t d : input._days,\n\t M : input._months\n\t };\n\t } else if (isNumber(input)) {\n\t duration = {};\n\t if (key) {\n\t duration[key] = input;\n\t } else {\n\t duration.milliseconds = input;\n\t }\n\t } else if (!!(match = aspNetRegex.exec(input))) {\n\t sign = (match[1] === '-') ? -1 : 1;\n\t duration = {\n\t y : 0,\n\t d : toInt(match[DATE]) * sign,\n\t h : toInt(match[HOUR]) * sign,\n\t m : toInt(match[MINUTE]) * sign,\n\t s : toInt(match[SECOND]) * sign,\n\t ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n\t };\n\t } else if (!!(match = isoRegex.exec(input))) {\n\t sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;\n\t duration = {\n\t y : parseIso(match[2], sign),\n\t M : parseIso(match[3], sign),\n\t w : parseIso(match[4], sign),\n\t d : parseIso(match[5], sign),\n\t h : parseIso(match[6], sign),\n\t m : parseIso(match[7], sign),\n\t s : parseIso(match[8], sign)\n\t };\n\t } else if (duration == null) {// checks for null or undefined\n\t duration = {};\n\t } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n\t diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\t\n\t duration = {};\n\t duration.ms = diffRes.milliseconds;\n\t duration.M = diffRes.months;\n\t }\n\t\n\t ret = new Duration(duration);\n\t\n\t if (isDuration(input) && hasOwnProp(input, '_locale')) {\n\t ret._locale = input._locale;\n\t }\n\t\n\t return ret;\n\t}\n\t\n\tcreateDuration.fn = Duration.prototype;\n\tcreateDuration.invalid = createInvalid$1;\n\t\n\tfunction parseIso (inp, sign) {\n\t // We'd normally use ~~inp for this, but unfortunately it also\n\t // converts floats to ints.\n\t // inp may be undefined, so careful calling replace on it.\n\t var res = inp && parseFloat(inp.replace(',', '.'));\n\t // apply sign while we're at it\n\t return (isNaN(res) ? 0 : res) * sign;\n\t}\n\t\n\tfunction positiveMomentsDifference(base, other) {\n\t var res = {milliseconds: 0, months: 0};\n\t\n\t res.months = other.month() - base.month() +\n\t (other.year() - base.year()) * 12;\n\t if (base.clone().add(res.months, 'M').isAfter(other)) {\n\t --res.months;\n\t }\n\t\n\t res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\t\n\t return res;\n\t}\n\t\n\tfunction momentsDifference(base, other) {\n\t var res;\n\t if (!(base.isValid() && other.isValid())) {\n\t return {milliseconds: 0, months: 0};\n\t }\n\t\n\t other = cloneWithOffset(other, base);\n\t if (base.isBefore(other)) {\n\t res = positiveMomentsDifference(base, other);\n\t } else {\n\t res = positiveMomentsDifference(other, base);\n\t res.milliseconds = -res.milliseconds;\n\t res.months = -res.months;\n\t }\n\t\n\t return res;\n\t}\n\t\n\t// TODO: remove 'name' arg after deprecation is removed\n\tfunction createAdder(direction, name) {\n\t return function (val, period) {\n\t var dur, tmp;\n\t //invert the arguments, but complain about it\n\t if (period !== null && !isNaN(+period)) {\n\t deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n\t 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n\t tmp = val; val = period; period = tmp;\n\t }\n\t\n\t val = typeof val === 'string' ? +val : val;\n\t dur = createDuration(val, period);\n\t addSubtract(this, dur, direction);\n\t return this;\n\t };\n\t}\n\t\n\tfunction addSubtract (mom, duration, isAdding, updateOffset) {\n\t var milliseconds = duration._milliseconds,\n\t days = absRound(duration._days),\n\t months = absRound(duration._months);\n\t\n\t if (!mom.isValid()) {\n\t // No op\n\t return;\n\t }\n\t\n\t updateOffset = updateOffset == null ? true : updateOffset;\n\t\n\t if (months) {\n\t setMonth(mom, get(mom, 'Month') + months * isAdding);\n\t }\n\t if (days) {\n\t set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n\t }\n\t if (milliseconds) {\n\t mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n\t }\n\t if (updateOffset) {\n\t hooks.updateOffset(mom, days || months);\n\t }\n\t}\n\t\n\tvar add = createAdder(1, 'add');\n\tvar subtract = createAdder(-1, 'subtract');\n\t\n\tfunction getCalendarFormat(myMoment, now) {\n\t var diff = myMoment.diff(now, 'days', true);\n\t return diff < -6 ? 'sameElse' :\n\t diff < -1 ? 'lastWeek' :\n\t diff < 0 ? 'lastDay' :\n\t diff < 1 ? 'sameDay' :\n\t diff < 2 ? 'nextDay' :\n\t diff < 7 ? 'nextWeek' : 'sameElse';\n\t}\n\t\n\tfunction calendar$1 (time, formats) {\n\t // We want to compare the start of today, vs this.\n\t // Getting start-of-today depends on whether we're local/utc/offset or not.\n\t var now = time || createLocal(),\n\t sod = cloneWithOffset(now, this).startOf('day'),\n\t format = hooks.calendarFormat(this, sod) || 'sameElse';\n\t\n\t var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\t\n\t return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n\t}\n\t\n\tfunction clone () {\n\t return new Moment(this);\n\t}\n\t\n\tfunction isAfter (input, units) {\n\t var localInput = isMoment(input) ? input : createLocal(input);\n\t if (!(this.isValid() && localInput.isValid())) {\n\t return false;\n\t }\n\t units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n\t if (units === 'millisecond') {\n\t return this.valueOf() > localInput.valueOf();\n\t } else {\n\t return localInput.valueOf() < this.clone().startOf(units).valueOf();\n\t }\n\t}\n\t\n\tfunction isBefore (input, units) {\n\t var localInput = isMoment(input) ? input : createLocal(input);\n\t if (!(this.isValid() && localInput.isValid())) {\n\t return false;\n\t }\n\t units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n\t if (units === 'millisecond') {\n\t return this.valueOf() < localInput.valueOf();\n\t } else {\n\t return this.clone().endOf(units).valueOf() < localInput.valueOf();\n\t }\n\t}\n\t\n\tfunction isBetween (from, to, units, inclusivity) {\n\t inclusivity = inclusivity || '()';\n\t return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n\t (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n\t}\n\t\n\tfunction isSame (input, units) {\n\t var localInput = isMoment(input) ? input : createLocal(input),\n\t inputMs;\n\t if (!(this.isValid() && localInput.isValid())) {\n\t return false;\n\t }\n\t units = normalizeUnits(units || 'millisecond');\n\t if (units === 'millisecond') {\n\t return this.valueOf() === localInput.valueOf();\n\t } else {\n\t inputMs = localInput.valueOf();\n\t return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n\t }\n\t}\n\t\n\tfunction isSameOrAfter (input, units) {\n\t return this.isSame(input, units) || this.isAfter(input,units);\n\t}\n\t\n\tfunction isSameOrBefore (input, units) {\n\t return this.isSame(input, units) || this.isBefore(input,units);\n\t}\n\t\n\tfunction diff (input, units, asFloat) {\n\t var that,\n\t zoneDelta,\n\t delta, output;\n\t\n\t if (!this.isValid()) {\n\t return NaN;\n\t }\n\t\n\t that = cloneWithOffset(input, this);\n\t\n\t if (!that.isValid()) {\n\t return NaN;\n\t }\n\t\n\t zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\t\n\t units = normalizeUnits(units);\n\t\n\t switch (units) {\n\t case 'year': output = monthDiff(this, that) / 12; break;\n\t case 'month': output = monthDiff(this, that); break;\n\t case 'quarter': output = monthDiff(this, that) / 3; break;\n\t case 'second': output = (this - that) / 1e3; break; // 1000\n\t case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n\t case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n\t case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n\t case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n\t default: output = this - that;\n\t }\n\t\n\t return asFloat ? output : absFloor(output);\n\t}\n\t\n\tfunction monthDiff (a, b) {\n\t // difference in months\n\t var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n\t // b is in (anchor - 1 month, anchor + 1 month)\n\t anchor = a.clone().add(wholeMonthDiff, 'months'),\n\t anchor2, adjust;\n\t\n\t if (b - anchor < 0) {\n\t anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n\t // linear across the month\n\t adjust = (b - anchor) / (anchor - anchor2);\n\t } else {\n\t anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n\t // linear across the month\n\t adjust = (b - anchor) / (anchor2 - anchor);\n\t }\n\t\n\t //check for negative zero, return zero if negative zero\n\t return -(wholeMonthDiff + adjust) || 0;\n\t}\n\t\n\thooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n\thooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\t\n\tfunction toString () {\n\t return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n\t}\n\t\n\tfunction toISOString(keepOffset) {\n\t if (!this.isValid()) {\n\t return null;\n\t }\n\t var utc = keepOffset !== true;\n\t var m = utc ? this.clone().utc() : this;\n\t if (m.year() < 0 || m.year() > 9999) {\n\t return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n\t }\n\t if (isFunction(Date.prototype.toISOString)) {\n\t // native implementation is ~50x faster, use it when we can\n\t if (utc) {\n\t return this.toDate().toISOString();\n\t } else {\n\t return new Date(this._d.valueOf()).toISOString().replace('Z', formatMoment(m, 'Z'));\n\t }\n\t }\n\t return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n\t}\n\t\n\t/**\n\t * Return a human readable representation of a moment that can\n\t * also be evaluated to get a new moment which is the same\n\t *\n\t * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n\t */\n\tfunction inspect () {\n\t if (!this.isValid()) {\n\t return 'moment.invalid(/* ' + this._i + ' */)';\n\t }\n\t var func = 'moment';\n\t var zone = '';\n\t if (!this.isLocal()) {\n\t func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n\t zone = 'Z';\n\t }\n\t var prefix = '[' + func + '(\"]';\n\t var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n\t var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n\t var suffix = zone + '[\")]';\n\t\n\t return this.format(prefix + year + datetime + suffix);\n\t}\n\t\n\tfunction format (inputString) {\n\t if (!inputString) {\n\t inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n\t }\n\t var output = formatMoment(this, inputString);\n\t return this.localeData().postformat(output);\n\t}\n\t\n\tfunction from (time, withoutSuffix) {\n\t if (this.isValid() &&\n\t ((isMoment(time) && time.isValid()) ||\n\t createLocal(time).isValid())) {\n\t return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n\t } else {\n\t return this.localeData().invalidDate();\n\t }\n\t}\n\t\n\tfunction fromNow (withoutSuffix) {\n\t return this.from(createLocal(), withoutSuffix);\n\t}\n\t\n\tfunction to (time, withoutSuffix) {\n\t if (this.isValid() &&\n\t ((isMoment(time) && time.isValid()) ||\n\t createLocal(time).isValid())) {\n\t return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n\t } else {\n\t return this.localeData().invalidDate();\n\t }\n\t}\n\t\n\tfunction toNow (withoutSuffix) {\n\t return this.to(createLocal(), withoutSuffix);\n\t}\n\t\n\t// If passed a locale key, it will set the locale for this\n\t// instance. Otherwise, it will return the locale configuration\n\t// variables for this instance.\n\tfunction locale (key) {\n\t var newLocaleData;\n\t\n\t if (key === undefined) {\n\t return this._locale._abbr;\n\t } else {\n\t newLocaleData = getLocale(key);\n\t if (newLocaleData != null) {\n\t this._locale = newLocaleData;\n\t }\n\t return this;\n\t }\n\t}\n\t\n\tvar lang = deprecate(\n\t 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n\t function (key) {\n\t if (key === undefined) {\n\t return this.localeData();\n\t } else {\n\t return this.locale(key);\n\t }\n\t }\n\t);\n\t\n\tfunction localeData () {\n\t return this._locale;\n\t}\n\t\n\tfunction startOf (units) {\n\t units = normalizeUnits(units);\n\t // the following switch intentionally omits break keywords\n\t // to utilize falling through the cases.\n\t switch (units) {\n\t case 'year':\n\t this.month(0);\n\t /* falls through */\n\t case 'quarter':\n\t case 'month':\n\t this.date(1);\n\t /* falls through */\n\t case 'week':\n\t case 'isoWeek':\n\t case 'day':\n\t case 'date':\n\t this.hours(0);\n\t /* falls through */\n\t case 'hour':\n\t this.minutes(0);\n\t /* falls through */\n\t case 'minute':\n\t this.seconds(0);\n\t /* falls through */\n\t case 'second':\n\t this.milliseconds(0);\n\t }\n\t\n\t // weeks are a special case\n\t if (units === 'week') {\n\t this.weekday(0);\n\t }\n\t if (units === 'isoWeek') {\n\t this.isoWeekday(1);\n\t }\n\t\n\t // quarters are also special\n\t if (units === 'quarter') {\n\t this.month(Math.floor(this.month() / 3) * 3);\n\t }\n\t\n\t return this;\n\t}\n\t\n\tfunction endOf (units) {\n\t units = normalizeUnits(units);\n\t if (units === undefined || units === 'millisecond') {\n\t return this;\n\t }\n\t\n\t // 'date' is an alias for 'day', so it should be considered as such.\n\t if (units === 'date') {\n\t units = 'day';\n\t }\n\t\n\t return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n\t}\n\t\n\tfunction valueOf () {\n\t return this._d.valueOf() - ((this._offset || 0) * 60000);\n\t}\n\t\n\tfunction unix () {\n\t return Math.floor(this.valueOf() / 1000);\n\t}\n\t\n\tfunction toDate () {\n\t return new Date(this.valueOf());\n\t}\n\t\n\tfunction toArray () {\n\t var m = this;\n\t return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n\t}\n\t\n\tfunction toObject () {\n\t var m = this;\n\t return {\n\t years: m.year(),\n\t months: m.month(),\n\t date: m.date(),\n\t hours: m.hours(),\n\t minutes: m.minutes(),\n\t seconds: m.seconds(),\n\t milliseconds: m.milliseconds()\n\t };\n\t}\n\t\n\tfunction toJSON () {\n\t // new Date(NaN).toJSON() === null\n\t return this.isValid() ? this.toISOString() : null;\n\t}\n\t\n\tfunction isValid$2 () {\n\t return isValid(this);\n\t}\n\t\n\tfunction parsingFlags () {\n\t return extend({}, getParsingFlags(this));\n\t}\n\t\n\tfunction invalidAt () {\n\t return getParsingFlags(this).overflow;\n\t}\n\t\n\tfunction creationData() {\n\t return {\n\t input: this._i,\n\t format: this._f,\n\t locale: this._locale,\n\t isUTC: this._isUTC,\n\t strict: this._strict\n\t };\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken(0, ['gg', 2], 0, function () {\n\t return this.weekYear() % 100;\n\t});\n\t\n\taddFormatToken(0, ['GG', 2], 0, function () {\n\t return this.isoWeekYear() % 100;\n\t});\n\t\n\tfunction addWeekYearFormatToken (token, getter) {\n\t addFormatToken(0, [token, token.length], 0, getter);\n\t}\n\t\n\taddWeekYearFormatToken('gggg', 'weekYear');\n\taddWeekYearFormatToken('ggggg', 'weekYear');\n\taddWeekYearFormatToken('GGGG', 'isoWeekYear');\n\taddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('weekYear', 'gg');\n\taddUnitAlias('isoWeekYear', 'GG');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('weekYear', 1);\n\taddUnitPriority('isoWeekYear', 1);\n\t\n\t\n\t// PARSING\n\t\n\taddRegexToken('G', matchSigned);\n\taddRegexToken('g', matchSigned);\n\taddRegexToken('GG', match1to2, match2);\n\taddRegexToken('gg', match1to2, match2);\n\taddRegexToken('GGGG', match1to4, match4);\n\taddRegexToken('gggg', match1to4, match4);\n\taddRegexToken('GGGGG', match1to6, match6);\n\taddRegexToken('ggggg', match1to6, match6);\n\t\n\taddWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n\t week[token.substr(0, 2)] = toInt(input);\n\t});\n\t\n\taddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n\t week[token] = hooks.parseTwoDigitYear(input);\n\t});\n\t\n\t// MOMENTS\n\t\n\tfunction getSetWeekYear (input) {\n\t return getSetWeekYearHelper.call(this,\n\t input,\n\t this.week(),\n\t this.weekday(),\n\t this.localeData()._week.dow,\n\t this.localeData()._week.doy);\n\t}\n\t\n\tfunction getSetISOWeekYear (input) {\n\t return getSetWeekYearHelper.call(this,\n\t input, this.isoWeek(), this.isoWeekday(), 1, 4);\n\t}\n\t\n\tfunction getISOWeeksInYear () {\n\t return weeksInYear(this.year(), 1, 4);\n\t}\n\t\n\tfunction getWeeksInYear () {\n\t var weekInfo = this.localeData()._week;\n\t return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n\t}\n\t\n\tfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n\t var weeksTarget;\n\t if (input == null) {\n\t return weekOfYear(this, dow, doy).year;\n\t } else {\n\t weeksTarget = weeksInYear(input, dow, doy);\n\t if (week > weeksTarget) {\n\t week = weeksTarget;\n\t }\n\t return setWeekAll.call(this, input, week, weekday, dow, doy);\n\t }\n\t}\n\t\n\tfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n\t var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n\t date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\t\n\t this.year(date.getUTCFullYear());\n\t this.month(date.getUTCMonth());\n\t this.date(date.getUTCDate());\n\t return this;\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('Q', 0, 'Qo', 'quarter');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('quarter', 'Q');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('quarter', 7);\n\t\n\t// PARSING\n\t\n\taddRegexToken('Q', match1);\n\taddParseToken('Q', function (input, array) {\n\t array[MONTH] = (toInt(input) - 1) * 3;\n\t});\n\t\n\t// MOMENTS\n\t\n\tfunction getSetQuarter (input) {\n\t return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('D', ['DD', 2], 'Do', 'date');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('date', 'D');\n\t\n\t// PRIOROITY\n\taddUnitPriority('date', 9);\n\t\n\t// PARSING\n\t\n\taddRegexToken('D', match1to2);\n\taddRegexToken('DD', match1to2, match2);\n\taddRegexToken('Do', function (isStrict, locale) {\n\t // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t return isStrict ?\n\t (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n\t locale._dayOfMonthOrdinalParseLenient;\n\t});\n\t\n\taddParseToken(['D', 'DD'], DATE);\n\taddParseToken('Do', function (input, array) {\n\t array[DATE] = toInt(input.match(match1to2)[0]);\n\t});\n\t\n\t// MOMENTS\n\t\n\tvar getSetDayOfMonth = makeGetSet('Date', true);\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('dayOfYear', 'DDD');\n\t\n\t// PRIORITY\n\taddUnitPriority('dayOfYear', 4);\n\t\n\t// PARSING\n\t\n\taddRegexToken('DDD', match1to3);\n\taddRegexToken('DDDD', match3);\n\taddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n\t config._dayOfYear = toInt(input);\n\t});\n\t\n\t// HELPERS\n\t\n\t// MOMENTS\n\t\n\tfunction getSetDayOfYear (input) {\n\t var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n\t return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('m', ['mm', 2], 0, 'minute');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('minute', 'm');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('minute', 14);\n\t\n\t// PARSING\n\t\n\taddRegexToken('m', match1to2);\n\taddRegexToken('mm', match1to2, match2);\n\taddParseToken(['m', 'mm'], MINUTE);\n\t\n\t// MOMENTS\n\t\n\tvar getSetMinute = makeGetSet('Minutes', false);\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('s', ['ss', 2], 0, 'second');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('second', 's');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('second', 15);\n\t\n\t// PARSING\n\t\n\taddRegexToken('s', match1to2);\n\taddRegexToken('ss', match1to2, match2);\n\taddParseToken(['s', 'ss'], SECOND);\n\t\n\t// MOMENTS\n\t\n\tvar getSetSecond = makeGetSet('Seconds', false);\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('S', 0, 0, function () {\n\t return ~~(this.millisecond() / 100);\n\t});\n\t\n\taddFormatToken(0, ['SS', 2], 0, function () {\n\t return ~~(this.millisecond() / 10);\n\t});\n\t\n\taddFormatToken(0, ['SSS', 3], 0, 'millisecond');\n\taddFormatToken(0, ['SSSS', 4], 0, function () {\n\t return this.millisecond() * 10;\n\t});\n\taddFormatToken(0, ['SSSSS', 5], 0, function () {\n\t return this.millisecond() * 100;\n\t});\n\taddFormatToken(0, ['SSSSSS', 6], 0, function () {\n\t return this.millisecond() * 1000;\n\t});\n\taddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n\t return this.millisecond() * 10000;\n\t});\n\taddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n\t return this.millisecond() * 100000;\n\t});\n\taddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n\t return this.millisecond() * 1000000;\n\t});\n\t\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('millisecond', 'ms');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('millisecond', 16);\n\t\n\t// PARSING\n\t\n\taddRegexToken('S', match1to3, match1);\n\taddRegexToken('SS', match1to3, match2);\n\taddRegexToken('SSS', match1to3, match3);\n\t\n\tvar token;\n\tfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n\t addRegexToken(token, matchUnsigned);\n\t}\n\t\n\tfunction parseMs(input, array) {\n\t array[MILLISECOND] = toInt(('0.' + input) * 1000);\n\t}\n\t\n\tfor (token = 'S'; token.length <= 9; token += 'S') {\n\t addParseToken(token, parseMs);\n\t}\n\t// MOMENTS\n\t\n\tvar getSetMillisecond = makeGetSet('Milliseconds', false);\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('z', 0, 0, 'zoneAbbr');\n\taddFormatToken('zz', 0, 0, 'zoneName');\n\t\n\t// MOMENTS\n\t\n\tfunction getZoneAbbr () {\n\t return this._isUTC ? 'UTC' : '';\n\t}\n\t\n\tfunction getZoneName () {\n\t return this._isUTC ? 'Coordinated Universal Time' : '';\n\t}\n\t\n\tvar proto = Moment.prototype;\n\t\n\tproto.add = add;\n\tproto.calendar = calendar$1;\n\tproto.clone = clone;\n\tproto.diff = diff;\n\tproto.endOf = endOf;\n\tproto.format = format;\n\tproto.from = from;\n\tproto.fromNow = fromNow;\n\tproto.to = to;\n\tproto.toNow = toNow;\n\tproto.get = stringGet;\n\tproto.invalidAt = invalidAt;\n\tproto.isAfter = isAfter;\n\tproto.isBefore = isBefore;\n\tproto.isBetween = isBetween;\n\tproto.isSame = isSame;\n\tproto.isSameOrAfter = isSameOrAfter;\n\tproto.isSameOrBefore = isSameOrBefore;\n\tproto.isValid = isValid$2;\n\tproto.lang = lang;\n\tproto.locale = locale;\n\tproto.localeData = localeData;\n\tproto.max = prototypeMax;\n\tproto.min = prototypeMin;\n\tproto.parsingFlags = parsingFlags;\n\tproto.set = stringSet;\n\tproto.startOf = startOf;\n\tproto.subtract = subtract;\n\tproto.toArray = toArray;\n\tproto.toObject = toObject;\n\tproto.toDate = toDate;\n\tproto.toISOString = toISOString;\n\tproto.inspect = inspect;\n\tproto.toJSON = toJSON;\n\tproto.toString = toString;\n\tproto.unix = unix;\n\tproto.valueOf = valueOf;\n\tproto.creationData = creationData;\n\t\n\t// Year\n\tproto.year = getSetYear;\n\tproto.isLeapYear = getIsLeapYear;\n\t\n\t// Week Year\n\tproto.weekYear = getSetWeekYear;\n\tproto.isoWeekYear = getSetISOWeekYear;\n\t\n\t// Quarter\n\tproto.quarter = proto.quarters = getSetQuarter;\n\t\n\t// Month\n\tproto.month = getSetMonth;\n\tproto.daysInMonth = getDaysInMonth;\n\t\n\t// Week\n\tproto.week = proto.weeks = getSetWeek;\n\tproto.isoWeek = proto.isoWeeks = getSetISOWeek;\n\tproto.weeksInYear = getWeeksInYear;\n\tproto.isoWeeksInYear = getISOWeeksInYear;\n\t\n\t// Day\n\tproto.date = getSetDayOfMonth;\n\tproto.day = proto.days = getSetDayOfWeek;\n\tproto.weekday = getSetLocaleDayOfWeek;\n\tproto.isoWeekday = getSetISODayOfWeek;\n\tproto.dayOfYear = getSetDayOfYear;\n\t\n\t// Hour\n\tproto.hour = proto.hours = getSetHour;\n\t\n\t// Minute\n\tproto.minute = proto.minutes = getSetMinute;\n\t\n\t// Second\n\tproto.second = proto.seconds = getSetSecond;\n\t\n\t// Millisecond\n\tproto.millisecond = proto.milliseconds = getSetMillisecond;\n\t\n\t// Offset\n\tproto.utcOffset = getSetOffset;\n\tproto.utc = setOffsetToUTC;\n\tproto.local = setOffsetToLocal;\n\tproto.parseZone = setOffsetToParsedOffset;\n\tproto.hasAlignedHourOffset = hasAlignedHourOffset;\n\tproto.isDST = isDaylightSavingTime;\n\tproto.isLocal = isLocal;\n\tproto.isUtcOffset = isUtcOffset;\n\tproto.isUtc = isUtc;\n\tproto.isUTC = isUtc;\n\t\n\t// Timezone\n\tproto.zoneAbbr = getZoneAbbr;\n\tproto.zoneName = getZoneName;\n\t\n\t// Deprecations\n\tproto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n\tproto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n\tproto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n\tproto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n\tproto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\t\n\tfunction createUnix (input) {\n\t return createLocal(input * 1000);\n\t}\n\t\n\tfunction createInZone () {\n\t return createLocal.apply(null, arguments).parseZone();\n\t}\n\t\n\tfunction preParsePostFormat (string) {\n\t return string;\n\t}\n\t\n\tvar proto$1 = Locale.prototype;\n\t\n\tproto$1.calendar = calendar;\n\tproto$1.longDateFormat = longDateFormat;\n\tproto$1.invalidDate = invalidDate;\n\tproto$1.ordinal = ordinal;\n\tproto$1.preparse = preParsePostFormat;\n\tproto$1.postformat = preParsePostFormat;\n\tproto$1.relativeTime = relativeTime;\n\tproto$1.pastFuture = pastFuture;\n\tproto$1.set = set;\n\t\n\t// Month\n\tproto$1.months = localeMonths;\n\tproto$1.monthsShort = localeMonthsShort;\n\tproto$1.monthsParse = localeMonthsParse;\n\tproto$1.monthsRegex = monthsRegex;\n\tproto$1.monthsShortRegex = monthsShortRegex;\n\t\n\t// Week\n\tproto$1.week = localeWeek;\n\tproto$1.firstDayOfYear = localeFirstDayOfYear;\n\tproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\t\n\t// Day of Week\n\tproto$1.weekdays = localeWeekdays;\n\tproto$1.weekdaysMin = localeWeekdaysMin;\n\tproto$1.weekdaysShort = localeWeekdaysShort;\n\tproto$1.weekdaysParse = localeWeekdaysParse;\n\t\n\tproto$1.weekdaysRegex = weekdaysRegex;\n\tproto$1.weekdaysShortRegex = weekdaysShortRegex;\n\tproto$1.weekdaysMinRegex = weekdaysMinRegex;\n\t\n\t// Hours\n\tproto$1.isPM = localeIsPM;\n\tproto$1.meridiem = localeMeridiem;\n\t\n\tfunction get$1 (format, index, field, setter) {\n\t var locale = getLocale();\n\t var utc = createUTC().set(setter, index);\n\t return locale[field](utc, format);\n\t}\n\t\n\tfunction listMonthsImpl (format, index, field) {\n\t if (isNumber(format)) {\n\t index = format;\n\t format = undefined;\n\t }\n\t\n\t format = format || '';\n\t\n\t if (index != null) {\n\t return get$1(format, index, field, 'month');\n\t }\n\t\n\t var i;\n\t var out = [];\n\t for (i = 0; i < 12; i++) {\n\t out[i] = get$1(format, i, field, 'month');\n\t }\n\t return out;\n\t}\n\t\n\t// ()\n\t// (5)\n\t// (fmt, 5)\n\t// (fmt)\n\t// (true)\n\t// (true, 5)\n\t// (true, fmt, 5)\n\t// (true, fmt)\n\tfunction listWeekdaysImpl (localeSorted, format, index, field) {\n\t if (typeof localeSorted === 'boolean') {\n\t if (isNumber(format)) {\n\t index = format;\n\t format = undefined;\n\t }\n\t\n\t format = format || '';\n\t } else {\n\t format = localeSorted;\n\t index = format;\n\t localeSorted = false;\n\t\n\t if (isNumber(format)) {\n\t index = format;\n\t format = undefined;\n\t }\n\t\n\t format = format || '';\n\t }\n\t\n\t var locale = getLocale(),\n\t shift = localeSorted ? locale._week.dow : 0;\n\t\n\t if (index != null) {\n\t return get$1(format, (index + shift) % 7, field, 'day');\n\t }\n\t\n\t var i;\n\t var out = [];\n\t for (i = 0; i < 7; i++) {\n\t out[i] = get$1(format, (i + shift) % 7, field, 'day');\n\t }\n\t return out;\n\t}\n\t\n\tfunction listMonths (format, index) {\n\t return listMonthsImpl(format, index, 'months');\n\t}\n\t\n\tfunction listMonthsShort (format, index) {\n\t return listMonthsImpl(format, index, 'monthsShort');\n\t}\n\t\n\tfunction listWeekdays (localeSorted, format, index) {\n\t return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n\t}\n\t\n\tfunction listWeekdaysShort (localeSorted, format, index) {\n\t return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n\t}\n\t\n\tfunction listWeekdaysMin (localeSorted, format, index) {\n\t return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n\t}\n\t\n\tgetSetGlobalLocale('en', {\n\t dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n\t ordinal : function (number) {\n\t var b = number % 10,\n\t output = (toInt(number % 100 / 10) === 1) ? 'th' :\n\t (b === 1) ? 'st' :\n\t (b === 2) ? 'nd' :\n\t (b === 3) ? 'rd' : 'th';\n\t return number + output;\n\t }\n\t});\n\t\n\t// Side effect imports\n\thooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n\thooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\t\n\tvar mathAbs = Math.abs;\n\t\n\tfunction abs () {\n\t var data = this._data;\n\t\n\t this._milliseconds = mathAbs(this._milliseconds);\n\t this._days = mathAbs(this._days);\n\t this._months = mathAbs(this._months);\n\t\n\t data.milliseconds = mathAbs(data.milliseconds);\n\t data.seconds = mathAbs(data.seconds);\n\t data.minutes = mathAbs(data.minutes);\n\t data.hours = mathAbs(data.hours);\n\t data.months = mathAbs(data.months);\n\t data.years = mathAbs(data.years);\n\t\n\t return this;\n\t}\n\t\n\tfunction addSubtract$1 (duration, input, value, direction) {\n\t var other = createDuration(input, value);\n\t\n\t duration._milliseconds += direction * other._milliseconds;\n\t duration._days += direction * other._days;\n\t duration._months += direction * other._months;\n\t\n\t return duration._bubble();\n\t}\n\t\n\t// supports only 2.0-style add(1, 's') or add(duration)\n\tfunction add$1 (input, value) {\n\t return addSubtract$1(this, input, value, 1);\n\t}\n\t\n\t// supports only 2.0-style subtract(1, 's') or subtract(duration)\n\tfunction subtract$1 (input, value) {\n\t return addSubtract$1(this, input, value, -1);\n\t}\n\t\n\tfunction absCeil (number) {\n\t if (number < 0) {\n\t return Math.floor(number);\n\t } else {\n\t return Math.ceil(number);\n\t }\n\t}\n\t\n\tfunction bubble () {\n\t var milliseconds = this._milliseconds;\n\t var days = this._days;\n\t var months = this._months;\n\t var data = this._data;\n\t var seconds, minutes, hours, years, monthsFromDays;\n\t\n\t // if we have a mix of positive and negative values, bubble down first\n\t // check: https://github.com/moment/moment/issues/2166\n\t if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n\t (milliseconds <= 0 && days <= 0 && months <= 0))) {\n\t milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n\t days = 0;\n\t months = 0;\n\t }\n\t\n\t // The following code bubbles up values, see the tests for\n\t // examples of what that means.\n\t data.milliseconds = milliseconds % 1000;\n\t\n\t seconds = absFloor(milliseconds / 1000);\n\t data.seconds = seconds % 60;\n\t\n\t minutes = absFloor(seconds / 60);\n\t data.minutes = minutes % 60;\n\t\n\t hours = absFloor(minutes / 60);\n\t data.hours = hours % 24;\n\t\n\t days += absFloor(hours / 24);\n\t\n\t // convert days to months\n\t monthsFromDays = absFloor(daysToMonths(days));\n\t months += monthsFromDays;\n\t days -= absCeil(monthsToDays(monthsFromDays));\n\t\n\t // 12 months -> 1 year\n\t years = absFloor(months / 12);\n\t months %= 12;\n\t\n\t data.days = days;\n\t data.months = months;\n\t data.years = years;\n\t\n\t return this;\n\t}\n\t\n\tfunction daysToMonths (days) {\n\t // 400 years have 146097 days (taking into account leap year rules)\n\t // 400 years have 12 months === 4800\n\t return days * 4800 / 146097;\n\t}\n\t\n\tfunction monthsToDays (months) {\n\t // the reverse of daysToMonths\n\t return months * 146097 / 4800;\n\t}\n\t\n\tfunction as (units) {\n\t if (!this.isValid()) {\n\t return NaN;\n\t }\n\t var days;\n\t var months;\n\t var milliseconds = this._milliseconds;\n\t\n\t units = normalizeUnits(units);\n\t\n\t if (units === 'month' || units === 'year') {\n\t days = this._days + milliseconds / 864e5;\n\t months = this._months + daysToMonths(days);\n\t return units === 'month' ? months : months / 12;\n\t } else {\n\t // handle milliseconds separately because of floating point math errors (issue #1867)\n\t days = this._days + Math.round(monthsToDays(this._months));\n\t switch (units) {\n\t case 'week' : return days / 7 + milliseconds / 6048e5;\n\t case 'day' : return days + milliseconds / 864e5;\n\t case 'hour' : return days * 24 + milliseconds / 36e5;\n\t case 'minute' : return days * 1440 + milliseconds / 6e4;\n\t case 'second' : return days * 86400 + milliseconds / 1000;\n\t // Math.floor prevents floating point math errors here\n\t case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n\t default: throw new Error('Unknown unit ' + units);\n\t }\n\t }\n\t}\n\t\n\t// TODO: Use this.as('ms')?\n\tfunction valueOf$1 () {\n\t if (!this.isValid()) {\n\t return NaN;\n\t }\n\t return (\n\t this._milliseconds +\n\t this._days * 864e5 +\n\t (this._months % 12) * 2592e6 +\n\t toInt(this._months / 12) * 31536e6\n\t );\n\t}\n\t\n\tfunction makeAs (alias) {\n\t return function () {\n\t return this.as(alias);\n\t };\n\t}\n\t\n\tvar asMilliseconds = makeAs('ms');\n\tvar asSeconds = makeAs('s');\n\tvar asMinutes = makeAs('m');\n\tvar asHours = makeAs('h');\n\tvar asDays = makeAs('d');\n\tvar asWeeks = makeAs('w');\n\tvar asMonths = makeAs('M');\n\tvar asYears = makeAs('y');\n\t\n\tfunction clone$1 () {\n\t return createDuration(this);\n\t}\n\t\n\tfunction get$2 (units) {\n\t units = normalizeUnits(units);\n\t return this.isValid() ? this[units + 's']() : NaN;\n\t}\n\t\n\tfunction makeGetter(name) {\n\t return function () {\n\t return this.isValid() ? this._data[name] : NaN;\n\t };\n\t}\n\t\n\tvar milliseconds = makeGetter('milliseconds');\n\tvar seconds = makeGetter('seconds');\n\tvar minutes = makeGetter('minutes');\n\tvar hours = makeGetter('hours');\n\tvar days = makeGetter('days');\n\tvar months = makeGetter('months');\n\tvar years = makeGetter('years');\n\t\n\tfunction weeks () {\n\t return absFloor(this.days() / 7);\n\t}\n\t\n\tvar round = Math.round;\n\tvar thresholds = {\n\t ss: 44, // a few seconds to seconds\n\t s : 45, // seconds to minute\n\t m : 45, // minutes to hour\n\t h : 22, // hours to day\n\t d : 26, // days to month\n\t M : 11 // months to year\n\t};\n\t\n\t// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n\tfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n\t return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n\t}\n\t\n\tfunction relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n\t var duration = createDuration(posNegDuration).abs();\n\t var seconds = round(duration.as('s'));\n\t var minutes = round(duration.as('m'));\n\t var hours = round(duration.as('h'));\n\t var days = round(duration.as('d'));\n\t var months = round(duration.as('M'));\n\t var years = round(duration.as('y'));\n\t\n\t var a = seconds <= thresholds.ss && ['s', seconds] ||\n\t seconds < thresholds.s && ['ss', seconds] ||\n\t minutes <= 1 && ['m'] ||\n\t minutes < thresholds.m && ['mm', minutes] ||\n\t hours <= 1 && ['h'] ||\n\t hours < thresholds.h && ['hh', hours] ||\n\t days <= 1 && ['d'] ||\n\t days < thresholds.d && ['dd', days] ||\n\t months <= 1 && ['M'] ||\n\t months < thresholds.M && ['MM', months] ||\n\t years <= 1 && ['y'] || ['yy', years];\n\t\n\t a[2] = withoutSuffix;\n\t a[3] = +posNegDuration > 0;\n\t a[4] = locale;\n\t return substituteTimeAgo.apply(null, a);\n\t}\n\t\n\t// This function allows you to set the rounding function for relative time strings\n\tfunction getSetRelativeTimeRounding (roundingFunction) {\n\t if (roundingFunction === undefined) {\n\t return round;\n\t }\n\t if (typeof(roundingFunction) === 'function') {\n\t round = roundingFunction;\n\t return true;\n\t }\n\t return false;\n\t}\n\t\n\t// This function allows you to set a threshold for relative time strings\n\tfunction getSetRelativeTimeThreshold (threshold, limit) {\n\t if (thresholds[threshold] === undefined) {\n\t return false;\n\t }\n\t if (limit === undefined) {\n\t return thresholds[threshold];\n\t }\n\t thresholds[threshold] = limit;\n\t if (threshold === 's') {\n\t thresholds.ss = limit - 1;\n\t }\n\t return true;\n\t}\n\t\n\tfunction humanize (withSuffix) {\n\t if (!this.isValid()) {\n\t return this.localeData().invalidDate();\n\t }\n\t\n\t var locale = this.localeData();\n\t var output = relativeTime$1(this, !withSuffix, locale);\n\t\n\t if (withSuffix) {\n\t output = locale.pastFuture(+this, output);\n\t }\n\t\n\t return locale.postformat(output);\n\t}\n\t\n\tvar abs$1 = Math.abs;\n\t\n\tfunction sign(x) {\n\t return ((x > 0) - (x < 0)) || +x;\n\t}\n\t\n\tfunction toISOString$1() {\n\t // for ISO strings we do not use the normal bubbling rules:\n\t // * milliseconds bubble up until they become hours\n\t // * days do not bubble at all\n\t // * months bubble up until they become years\n\t // This is because there is no context-free conversion between hours and days\n\t // (think of clock changes)\n\t // and also not between days and months (28-31 days per month)\n\t if (!this.isValid()) {\n\t return this.localeData().invalidDate();\n\t }\n\t\n\t var seconds = abs$1(this._milliseconds) / 1000;\n\t var days = abs$1(this._days);\n\t var months = abs$1(this._months);\n\t var minutes, hours, years;\n\t\n\t // 3600 seconds -> 60 minutes -> 1 hour\n\t minutes = absFloor(seconds / 60);\n\t hours = absFloor(minutes / 60);\n\t seconds %= 60;\n\t minutes %= 60;\n\t\n\t // 12 months -> 1 year\n\t years = absFloor(months / 12);\n\t months %= 12;\n\t\n\t\n\t // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n\t var Y = years;\n\t var M = months;\n\t var D = days;\n\t var h = hours;\n\t var m = minutes;\n\t var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\t var total = this.asSeconds();\n\t\n\t if (!total) {\n\t // this is the same as C#'s (Noda) and python (isodate)...\n\t // but not other JS (goog.date)\n\t return 'P0D';\n\t }\n\t\n\t var totalSign = total < 0 ? '-' : '';\n\t var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n\t var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n\t var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\t\n\t return totalSign + 'P' +\n\t (Y ? ymSign + Y + 'Y' : '') +\n\t (M ? ymSign + M + 'M' : '') +\n\t (D ? daysSign + D + 'D' : '') +\n\t ((h || m || s) ? 'T' : '') +\n\t (h ? hmsSign + h + 'H' : '') +\n\t (m ? hmsSign + m + 'M' : '') +\n\t (s ? hmsSign + s + 'S' : '');\n\t}\n\t\n\tvar proto$2 = Duration.prototype;\n\t\n\tproto$2.isValid = isValid$1;\n\tproto$2.abs = abs;\n\tproto$2.add = add$1;\n\tproto$2.subtract = subtract$1;\n\tproto$2.as = as;\n\tproto$2.asMilliseconds = asMilliseconds;\n\tproto$2.asSeconds = asSeconds;\n\tproto$2.asMinutes = asMinutes;\n\tproto$2.asHours = asHours;\n\tproto$2.asDays = asDays;\n\tproto$2.asWeeks = asWeeks;\n\tproto$2.asMonths = asMonths;\n\tproto$2.asYears = asYears;\n\tproto$2.valueOf = valueOf$1;\n\tproto$2._bubble = bubble;\n\tproto$2.clone = clone$1;\n\tproto$2.get = get$2;\n\tproto$2.milliseconds = milliseconds;\n\tproto$2.seconds = seconds;\n\tproto$2.minutes = minutes;\n\tproto$2.hours = hours;\n\tproto$2.days = days;\n\tproto$2.weeks = weeks;\n\tproto$2.months = months;\n\tproto$2.years = years;\n\tproto$2.humanize = humanize;\n\tproto$2.toISOString = toISOString$1;\n\tproto$2.toString = toISOString$1;\n\tproto$2.toJSON = toISOString$1;\n\tproto$2.locale = locale;\n\tproto$2.localeData = localeData;\n\t\n\t// Deprecations\n\tproto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n\tproto$2.lang = lang;\n\t\n\t// Side effect imports\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('X', 0, 0, 'unix');\n\taddFormatToken('x', 0, 0, 'valueOf');\n\t\n\t// PARSING\n\t\n\taddRegexToken('x', matchSigned);\n\taddRegexToken('X', matchTimestamp);\n\taddParseToken('X', function (input, array, config) {\n\t config._d = new Date(parseFloat(input, 10) * 1000);\n\t});\n\taddParseToken('x', function (input, array, config) {\n\t config._d = new Date(toInt(input));\n\t});\n\t\n\t// Side effect imports\n\t\n\t\n\thooks.version = '2.20.1';\n\t\n\tsetHookCallback(createLocal);\n\t\n\thooks.fn = proto;\n\thooks.min = min;\n\thooks.max = max;\n\thooks.now = now;\n\thooks.utc = createUTC;\n\thooks.unix = createUnix;\n\thooks.months = listMonths;\n\thooks.isDate = isDate;\n\thooks.locale = getSetGlobalLocale;\n\thooks.invalid = createInvalid;\n\thooks.duration = createDuration;\n\thooks.isMoment = isMoment;\n\thooks.weekdays = listWeekdays;\n\thooks.parseZone = createInZone;\n\thooks.localeData = getLocale;\n\thooks.isDuration = isDuration;\n\thooks.monthsShort = listMonthsShort;\n\thooks.weekdaysMin = listWeekdaysMin;\n\thooks.defineLocale = defineLocale;\n\thooks.updateLocale = updateLocale;\n\thooks.locales = listLocales;\n\thooks.weekdaysShort = listWeekdaysShort;\n\thooks.normalizeUnits = normalizeUnits;\n\thooks.relativeTimeRounding = getSetRelativeTimeRounding;\n\thooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n\thooks.calendarFormat = getCalendarFormat;\n\thooks.prototype = proto;\n\t\n\t// currently HTML5 input type only supports 24-hour formats\n\thooks.HTML5_FMT = {\n\t DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n\t DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n\t DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n\t DATE: 'YYYY-MM-DD', // \n\t TIME: 'HH:mm', // \n\t TIME_SECONDS: 'HH:mm:ss', // \n\t TIME_MS: 'HH:mm:ss.SSS', // \n\t WEEK: 'YYYY-[W]WW', // \n\t MONTH: 'YYYY-MM' // \n\t};\n\t\n\treturn hooks;\n\t\n\t})));\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(110)(module)))\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(module) {//! moment.js\n\t//! version : 2.18.1\n\t//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n\t//! license : MIT\n\t//! momentjs.com\n\t\n\t;(function (global, factory) {\n\t true ? module.exports = factory() :\n\t typeof define === 'function' && define.amd ? define(factory) :\n\t global.moment = factory()\n\t}(this, (function () { 'use strict';\n\t\n\tvar hookCallback;\n\t\n\tfunction hooks () {\n\t return hookCallback.apply(null, arguments);\n\t}\n\t\n\t// This is done to register the method called with moment()\n\t// without creating circular dependencies.\n\tfunction setHookCallback (callback) {\n\t hookCallback = callback;\n\t}\n\t\n\tfunction isArray(input) {\n\t return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n\t}\n\t\n\tfunction isObject(input) {\n\t // IE8 will treat undefined and null as object if it wasn't for\n\t // input != null\n\t return input != null && Object.prototype.toString.call(input) === '[object Object]';\n\t}\n\t\n\tfunction isObjectEmpty(obj) {\n\t var k;\n\t for (k in obj) {\n\t // even if its not own property I'd still call it non-empty\n\t return false;\n\t }\n\t return true;\n\t}\n\t\n\tfunction isUndefined(input) {\n\t return input === void 0;\n\t}\n\t\n\tfunction isNumber(input) {\n\t return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n\t}\n\t\n\tfunction isDate(input) {\n\t return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n\t}\n\t\n\tfunction map(arr, fn) {\n\t var res = [], i;\n\t for (i = 0; i < arr.length; ++i) {\n\t res.push(fn(arr[i], i));\n\t }\n\t return res;\n\t}\n\t\n\tfunction hasOwnProp(a, b) {\n\t return Object.prototype.hasOwnProperty.call(a, b);\n\t}\n\t\n\tfunction extend(a, b) {\n\t for (var i in b) {\n\t if (hasOwnProp(b, i)) {\n\t a[i] = b[i];\n\t }\n\t }\n\t\n\t if (hasOwnProp(b, 'toString')) {\n\t a.toString = b.toString;\n\t }\n\t\n\t if (hasOwnProp(b, 'valueOf')) {\n\t a.valueOf = b.valueOf;\n\t }\n\t\n\t return a;\n\t}\n\t\n\tfunction createUTC (input, format, locale, strict) {\n\t return createLocalOrUTC(input, format, locale, strict, true).utc();\n\t}\n\t\n\tfunction defaultParsingFlags() {\n\t // We need to deep clone this object.\n\t return {\n\t empty : false,\n\t unusedTokens : [],\n\t unusedInput : [],\n\t overflow : -2,\n\t charsLeftOver : 0,\n\t nullInput : false,\n\t invalidMonth : null,\n\t invalidFormat : false,\n\t userInvalidated : false,\n\t iso : false,\n\t parsedDateParts : [],\n\t meridiem : null,\n\t rfc2822 : false,\n\t weekdayMismatch : false\n\t };\n\t}\n\t\n\tfunction getParsingFlags(m) {\n\t if (m._pf == null) {\n\t m._pf = defaultParsingFlags();\n\t }\n\t return m._pf;\n\t}\n\t\n\tvar some;\n\tif (Array.prototype.some) {\n\t some = Array.prototype.some;\n\t} else {\n\t some = function (fun) {\n\t var t = Object(this);\n\t var len = t.length >>> 0;\n\t\n\t for (var i = 0; i < len; i++) {\n\t if (i in t && fun.call(this, t[i], i, t)) {\n\t return true;\n\t }\n\t }\n\t\n\t return false;\n\t };\n\t}\n\t\n\tvar some$1 = some;\n\t\n\tfunction isValid(m) {\n\t if (m._isValid == null) {\n\t var flags = getParsingFlags(m);\n\t var parsedParts = some$1.call(flags.parsedDateParts, function (i) {\n\t return i != null;\n\t });\n\t var isNowValid = !isNaN(m._d.getTime()) &&\n\t flags.overflow < 0 &&\n\t !flags.empty &&\n\t !flags.invalidMonth &&\n\t !flags.invalidWeekday &&\n\t !flags.nullInput &&\n\t !flags.invalidFormat &&\n\t !flags.userInvalidated &&\n\t (!flags.meridiem || (flags.meridiem && parsedParts));\n\t\n\t if (m._strict) {\n\t isNowValid = isNowValid &&\n\t flags.charsLeftOver === 0 &&\n\t flags.unusedTokens.length === 0 &&\n\t flags.bigHour === undefined;\n\t }\n\t\n\t if (Object.isFrozen == null || !Object.isFrozen(m)) {\n\t m._isValid = isNowValid;\n\t }\n\t else {\n\t return isNowValid;\n\t }\n\t }\n\t return m._isValid;\n\t}\n\t\n\tfunction createInvalid (flags) {\n\t var m = createUTC(NaN);\n\t if (flags != null) {\n\t extend(getParsingFlags(m), flags);\n\t }\n\t else {\n\t getParsingFlags(m).userInvalidated = true;\n\t }\n\t\n\t return m;\n\t}\n\t\n\t// Plugins that add properties should also add the key here (null value),\n\t// so we can properly clone ourselves.\n\tvar momentProperties = hooks.momentProperties = [];\n\t\n\tfunction copyConfig(to, from) {\n\t var i, prop, val;\n\t\n\t if (!isUndefined(from._isAMomentObject)) {\n\t to._isAMomentObject = from._isAMomentObject;\n\t }\n\t if (!isUndefined(from._i)) {\n\t to._i = from._i;\n\t }\n\t if (!isUndefined(from._f)) {\n\t to._f = from._f;\n\t }\n\t if (!isUndefined(from._l)) {\n\t to._l = from._l;\n\t }\n\t if (!isUndefined(from._strict)) {\n\t to._strict = from._strict;\n\t }\n\t if (!isUndefined(from._tzm)) {\n\t to._tzm = from._tzm;\n\t }\n\t if (!isUndefined(from._isUTC)) {\n\t to._isUTC = from._isUTC;\n\t }\n\t if (!isUndefined(from._offset)) {\n\t to._offset = from._offset;\n\t }\n\t if (!isUndefined(from._pf)) {\n\t to._pf = getParsingFlags(from);\n\t }\n\t if (!isUndefined(from._locale)) {\n\t to._locale = from._locale;\n\t }\n\t\n\t if (momentProperties.length > 0) {\n\t for (i = 0; i < momentProperties.length; i++) {\n\t prop = momentProperties[i];\n\t val = from[prop];\n\t if (!isUndefined(val)) {\n\t to[prop] = val;\n\t }\n\t }\n\t }\n\t\n\t return to;\n\t}\n\t\n\tvar updateInProgress = false;\n\t\n\t// Moment prototype object\n\tfunction Moment(config) {\n\t copyConfig(this, config);\n\t this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n\t if (!this.isValid()) {\n\t this._d = new Date(NaN);\n\t }\n\t // Prevent infinite loop in case updateOffset creates new moment\n\t // objects.\n\t if (updateInProgress === false) {\n\t updateInProgress = true;\n\t hooks.updateOffset(this);\n\t updateInProgress = false;\n\t }\n\t}\n\t\n\tfunction isMoment (obj) {\n\t return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n\t}\n\t\n\tfunction absFloor (number) {\n\t if (number < 0) {\n\t // -0 -> 0\n\t return Math.ceil(number) || 0;\n\t } else {\n\t return Math.floor(number);\n\t }\n\t}\n\t\n\tfunction toInt(argumentForCoercion) {\n\t var coercedNumber = +argumentForCoercion,\n\t value = 0;\n\t\n\t if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n\t value = absFloor(coercedNumber);\n\t }\n\t\n\t return value;\n\t}\n\t\n\t// compare two arrays, return the number of differences\n\tfunction compareArrays(array1, array2, dontConvert) {\n\t var len = Math.min(array1.length, array2.length),\n\t lengthDiff = Math.abs(array1.length - array2.length),\n\t diffs = 0,\n\t i;\n\t for (i = 0; i < len; i++) {\n\t if ((dontConvert && array1[i] !== array2[i]) ||\n\t (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n\t diffs++;\n\t }\n\t }\n\t return diffs + lengthDiff;\n\t}\n\t\n\tfunction warn(msg) {\n\t if (hooks.suppressDeprecationWarnings === false &&\n\t (typeof console !== 'undefined') && console.warn) {\n\t console.warn('Deprecation warning: ' + msg);\n\t }\n\t}\n\t\n\tfunction deprecate(msg, fn) {\n\t var firstTime = true;\n\t\n\t return extend(function () {\n\t if (hooks.deprecationHandler != null) {\n\t hooks.deprecationHandler(null, msg);\n\t }\n\t if (firstTime) {\n\t var args = [];\n\t var arg;\n\t for (var i = 0; i < arguments.length; i++) {\n\t arg = '';\n\t if (typeof arguments[i] === 'object') {\n\t arg += '\\n[' + i + '] ';\n\t for (var key in arguments[0]) {\n\t arg += key + ': ' + arguments[0][key] + ', ';\n\t }\n\t arg = arg.slice(0, -2); // Remove trailing comma and space\n\t } else {\n\t arg = arguments[i];\n\t }\n\t args.push(arg);\n\t }\n\t warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n\t firstTime = false;\n\t }\n\t return fn.apply(this, arguments);\n\t }, fn);\n\t}\n\t\n\tvar deprecations = {};\n\t\n\tfunction deprecateSimple(name, msg) {\n\t if (hooks.deprecationHandler != null) {\n\t hooks.deprecationHandler(name, msg);\n\t }\n\t if (!deprecations[name]) {\n\t warn(msg);\n\t deprecations[name] = true;\n\t }\n\t}\n\t\n\thooks.suppressDeprecationWarnings = false;\n\thooks.deprecationHandler = null;\n\t\n\tfunction isFunction(input) {\n\t return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n\t}\n\t\n\tfunction set (config) {\n\t var prop, i;\n\t for (i in config) {\n\t prop = config[i];\n\t if (isFunction(prop)) {\n\t this[i] = prop;\n\t } else {\n\t this['_' + i] = prop;\n\t }\n\t }\n\t this._config = config;\n\t // Lenient ordinal parsing accepts just a number in addition to\n\t // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n\t // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t this._dayOfMonthOrdinalParseLenient = new RegExp(\n\t (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n\t '|' + (/\\d{1,2}/).source);\n\t}\n\t\n\tfunction mergeConfigs(parentConfig, childConfig) {\n\t var res = extend({}, parentConfig), prop;\n\t for (prop in childConfig) {\n\t if (hasOwnProp(childConfig, prop)) {\n\t if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n\t res[prop] = {};\n\t extend(res[prop], parentConfig[prop]);\n\t extend(res[prop], childConfig[prop]);\n\t } else if (childConfig[prop] != null) {\n\t res[prop] = childConfig[prop];\n\t } else {\n\t delete res[prop];\n\t }\n\t }\n\t }\n\t for (prop in parentConfig) {\n\t if (hasOwnProp(parentConfig, prop) &&\n\t !hasOwnProp(childConfig, prop) &&\n\t isObject(parentConfig[prop])) {\n\t // make sure changes to properties don't modify parent config\n\t res[prop] = extend({}, res[prop]);\n\t }\n\t }\n\t return res;\n\t}\n\t\n\tfunction Locale(config) {\n\t if (config != null) {\n\t this.set(config);\n\t }\n\t}\n\t\n\tvar keys;\n\t\n\tif (Object.keys) {\n\t keys = Object.keys;\n\t} else {\n\t keys = function (obj) {\n\t var i, res = [];\n\t for (i in obj) {\n\t if (hasOwnProp(obj, i)) {\n\t res.push(i);\n\t }\n\t }\n\t return res;\n\t };\n\t}\n\t\n\tvar keys$1 = keys;\n\t\n\tvar defaultCalendar = {\n\t sameDay : '[Today at] LT',\n\t nextDay : '[Tomorrow at] LT',\n\t nextWeek : 'dddd [at] LT',\n\t lastDay : '[Yesterday at] LT',\n\t lastWeek : '[Last] dddd [at] LT',\n\t sameElse : 'L'\n\t};\n\t\n\tfunction calendar (key, mom, now) {\n\t var output = this._calendar[key] || this._calendar['sameElse'];\n\t return isFunction(output) ? output.call(mom, now) : output;\n\t}\n\t\n\tvar defaultLongDateFormat = {\n\t LTS : 'h:mm:ss A',\n\t LT : 'h:mm A',\n\t L : 'MM/DD/YYYY',\n\t LL : 'MMMM D, YYYY',\n\t LLL : 'MMMM D, YYYY h:mm A',\n\t LLLL : 'dddd, MMMM D, YYYY h:mm A'\n\t};\n\t\n\tfunction longDateFormat (key) {\n\t var format = this._longDateFormat[key],\n\t formatUpper = this._longDateFormat[key.toUpperCase()];\n\t\n\t if (format || !formatUpper) {\n\t return format;\n\t }\n\t\n\t this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n\t return val.slice(1);\n\t });\n\t\n\t return this._longDateFormat[key];\n\t}\n\t\n\tvar defaultInvalidDate = 'Invalid date';\n\t\n\tfunction invalidDate () {\n\t return this._invalidDate;\n\t}\n\t\n\tvar defaultOrdinal = '%d';\n\tvar defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\t\n\tfunction ordinal (number) {\n\t return this._ordinal.replace('%d', number);\n\t}\n\t\n\tvar defaultRelativeTime = {\n\t future : 'in %s',\n\t past : '%s ago',\n\t s : 'a few seconds',\n\t ss : '%d seconds',\n\t m : 'a minute',\n\t mm : '%d minutes',\n\t h : 'an hour',\n\t hh : '%d hours',\n\t d : 'a day',\n\t dd : '%d days',\n\t M : 'a month',\n\t MM : '%d months',\n\t y : 'a year',\n\t yy : '%d years'\n\t};\n\t\n\tfunction relativeTime (number, withoutSuffix, string, isFuture) {\n\t var output = this._relativeTime[string];\n\t return (isFunction(output)) ?\n\t output(number, withoutSuffix, string, isFuture) :\n\t output.replace(/%d/i, number);\n\t}\n\t\n\tfunction pastFuture (diff, output) {\n\t var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n\t return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n\t}\n\t\n\tvar aliases = {};\n\t\n\tfunction addUnitAlias (unit, shorthand) {\n\t var lowerCase = unit.toLowerCase();\n\t aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n\t}\n\t\n\tfunction normalizeUnits(units) {\n\t return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n\t}\n\t\n\tfunction normalizeObjectUnits(inputObject) {\n\t var normalizedInput = {},\n\t normalizedProp,\n\t prop;\n\t\n\t for (prop in inputObject) {\n\t if (hasOwnProp(inputObject, prop)) {\n\t normalizedProp = normalizeUnits(prop);\n\t if (normalizedProp) {\n\t normalizedInput[normalizedProp] = inputObject[prop];\n\t }\n\t }\n\t }\n\t\n\t return normalizedInput;\n\t}\n\t\n\tvar priorities = {};\n\t\n\tfunction addUnitPriority(unit, priority) {\n\t priorities[unit] = priority;\n\t}\n\t\n\tfunction getPrioritizedUnits(unitsObj) {\n\t var units = [];\n\t for (var u in unitsObj) {\n\t units.push({unit: u, priority: priorities[u]});\n\t }\n\t units.sort(function (a, b) {\n\t return a.priority - b.priority;\n\t });\n\t return units;\n\t}\n\t\n\tfunction makeGetSet (unit, keepTime) {\n\t return function (value) {\n\t if (value != null) {\n\t set$1(this, unit, value);\n\t hooks.updateOffset(this, keepTime);\n\t return this;\n\t } else {\n\t return get(this, unit);\n\t }\n\t };\n\t}\n\t\n\tfunction get (mom, unit) {\n\t return mom.isValid() ?\n\t mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n\t}\n\t\n\tfunction set$1 (mom, unit, value) {\n\t if (mom.isValid()) {\n\t mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n\t }\n\t}\n\t\n\t// MOMENTS\n\t\n\tfunction stringGet (units) {\n\t units = normalizeUnits(units);\n\t if (isFunction(this[units])) {\n\t return this[units]();\n\t }\n\t return this;\n\t}\n\t\n\t\n\tfunction stringSet (units, value) {\n\t if (typeof units === 'object') {\n\t units = normalizeObjectUnits(units);\n\t var prioritized = getPrioritizedUnits(units);\n\t for (var i = 0; i < prioritized.length; i++) {\n\t this[prioritized[i].unit](units[prioritized[i].unit]);\n\t }\n\t } else {\n\t units = normalizeUnits(units);\n\t if (isFunction(this[units])) {\n\t return this[units](value);\n\t }\n\t }\n\t return this;\n\t}\n\t\n\tfunction zeroFill(number, targetLength, forceSign) {\n\t var absNumber = '' + Math.abs(number),\n\t zerosToFill = targetLength - absNumber.length,\n\t sign = number >= 0;\n\t return (sign ? (forceSign ? '+' : '') : '-') +\n\t Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n\t}\n\t\n\tvar formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\t\n\tvar localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\t\n\tvar formatFunctions = {};\n\t\n\tvar formatTokenFunctions = {};\n\t\n\t// token: 'M'\n\t// padded: ['MM', 2]\n\t// ordinal: 'Mo'\n\t// callback: function () { this.month() + 1 }\n\tfunction addFormatToken (token, padded, ordinal, callback) {\n\t var func = callback;\n\t if (typeof callback === 'string') {\n\t func = function () {\n\t return this[callback]();\n\t };\n\t }\n\t if (token) {\n\t formatTokenFunctions[token] = func;\n\t }\n\t if (padded) {\n\t formatTokenFunctions[padded[0]] = function () {\n\t return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n\t };\n\t }\n\t if (ordinal) {\n\t formatTokenFunctions[ordinal] = function () {\n\t return this.localeData().ordinal(func.apply(this, arguments), token);\n\t };\n\t }\n\t}\n\t\n\tfunction removeFormattingTokens(input) {\n\t if (input.match(/\\[[\\s\\S]/)) {\n\t return input.replace(/^\\[|\\]$/g, '');\n\t }\n\t return input.replace(/\\\\/g, '');\n\t}\n\t\n\tfunction makeFormatFunction(format) {\n\t var array = format.match(formattingTokens), i, length;\n\t\n\t for (i = 0, length = array.length; i < length; i++) {\n\t if (formatTokenFunctions[array[i]]) {\n\t array[i] = formatTokenFunctions[array[i]];\n\t } else {\n\t array[i] = removeFormattingTokens(array[i]);\n\t }\n\t }\n\t\n\t return function (mom) {\n\t var output = '', i;\n\t for (i = 0; i < length; i++) {\n\t output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n\t }\n\t return output;\n\t };\n\t}\n\t\n\t// format date using native date object\n\tfunction formatMoment(m, format) {\n\t if (!m.isValid()) {\n\t return m.localeData().invalidDate();\n\t }\n\t\n\t format = expandFormat(format, m.localeData());\n\t formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\t\n\t return formatFunctions[format](m);\n\t}\n\t\n\tfunction expandFormat(format, locale) {\n\t var i = 5;\n\t\n\t function replaceLongDateFormatTokens(input) {\n\t return locale.longDateFormat(input) || input;\n\t }\n\t\n\t localFormattingTokens.lastIndex = 0;\n\t while (i >= 0 && localFormattingTokens.test(format)) {\n\t format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n\t localFormattingTokens.lastIndex = 0;\n\t i -= 1;\n\t }\n\t\n\t return format;\n\t}\n\t\n\tvar match1 = /\\d/; // 0 - 9\n\tvar match2 = /\\d\\d/; // 00 - 99\n\tvar match3 = /\\d{3}/; // 000 - 999\n\tvar match4 = /\\d{4}/; // 0000 - 9999\n\tvar match6 = /[+-]?\\d{6}/; // -999999 - 999999\n\tvar match1to2 = /\\d\\d?/; // 0 - 99\n\tvar match3to4 = /\\d\\d\\d\\d?/; // 999 - 9999\n\tvar match5to6 = /\\d\\d\\d\\d\\d\\d?/; // 99999 - 999999\n\tvar match1to3 = /\\d{1,3}/; // 0 - 999\n\tvar match1to4 = /\\d{1,4}/; // 0 - 9999\n\tvar match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\t\n\tvar matchUnsigned = /\\d+/; // 0 - inf\n\tvar matchSigned = /[+-]?\\d+/; // -inf - inf\n\t\n\tvar matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\tvar matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\t\n\tvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\t\n\t// any word (or two) characters or numbers including two/three word month in arabic.\n\t// includes scottish gaelic two word and hyphenated months\n\tvar matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\t\n\t\n\tvar regexes = {};\n\t\n\tfunction addRegexToken (token, regex, strictRegex) {\n\t regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n\t return (isStrict && strictRegex) ? strictRegex : regex;\n\t };\n\t}\n\t\n\tfunction getParseRegexForToken (token, config) {\n\t if (!hasOwnProp(regexes, token)) {\n\t return new RegExp(unescapeFormat(token));\n\t }\n\t\n\t return regexes[token](config._strict, config._locale);\n\t}\n\t\n\t// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n\tfunction unescapeFormat(s) {\n\t return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n\t return p1 || p2 || p3 || p4;\n\t }));\n\t}\n\t\n\tfunction regexEscape(s) {\n\t return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t}\n\t\n\tvar tokens = {};\n\t\n\tfunction addParseToken (token, callback) {\n\t var i, func = callback;\n\t if (typeof token === 'string') {\n\t token = [token];\n\t }\n\t if (isNumber(callback)) {\n\t func = function (input, array) {\n\t array[callback] = toInt(input);\n\t };\n\t }\n\t for (i = 0; i < token.length; i++) {\n\t tokens[token[i]] = func;\n\t }\n\t}\n\t\n\tfunction addWeekParseToken (token, callback) {\n\t addParseToken(token, function (input, array, config, token) {\n\t config._w = config._w || {};\n\t callback(input, config._w, config, token);\n\t });\n\t}\n\t\n\tfunction addTimeToArrayFromToken(token, input, config) {\n\t if (input != null && hasOwnProp(tokens, token)) {\n\t tokens[token](input, config._a, config, token);\n\t }\n\t}\n\t\n\tvar YEAR = 0;\n\tvar MONTH = 1;\n\tvar DATE = 2;\n\tvar HOUR = 3;\n\tvar MINUTE = 4;\n\tvar SECOND = 5;\n\tvar MILLISECOND = 6;\n\tvar WEEK = 7;\n\tvar WEEKDAY = 8;\n\t\n\tvar indexOf;\n\t\n\tif (Array.prototype.indexOf) {\n\t indexOf = Array.prototype.indexOf;\n\t} else {\n\t indexOf = function (o) {\n\t // I know\n\t var i;\n\t for (i = 0; i < this.length; ++i) {\n\t if (this[i] === o) {\n\t return i;\n\t }\n\t }\n\t return -1;\n\t };\n\t}\n\t\n\tvar indexOf$1 = indexOf;\n\t\n\tfunction daysInMonth(year, month) {\n\t return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('M', ['MM', 2], 'Mo', function () {\n\t return this.month() + 1;\n\t});\n\t\n\taddFormatToken('MMM', 0, 0, function (format) {\n\t return this.localeData().monthsShort(this, format);\n\t});\n\t\n\taddFormatToken('MMMM', 0, 0, function (format) {\n\t return this.localeData().months(this, format);\n\t});\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('month', 'M');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('month', 8);\n\t\n\t// PARSING\n\t\n\taddRegexToken('M', match1to2);\n\taddRegexToken('MM', match1to2, match2);\n\taddRegexToken('MMM', function (isStrict, locale) {\n\t return locale.monthsShortRegex(isStrict);\n\t});\n\taddRegexToken('MMMM', function (isStrict, locale) {\n\t return locale.monthsRegex(isStrict);\n\t});\n\t\n\taddParseToken(['M', 'MM'], function (input, array) {\n\t array[MONTH] = toInt(input) - 1;\n\t});\n\t\n\taddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n\t var month = config._locale.monthsParse(input, token, config._strict);\n\t // if we didn't find a month name, mark the date as invalid.\n\t if (month != null) {\n\t array[MONTH] = month;\n\t } else {\n\t getParsingFlags(config).invalidMonth = input;\n\t }\n\t});\n\t\n\t// LOCALES\n\t\n\tvar MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n\tvar defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n\tfunction localeMonths (m, format) {\n\t if (!m) {\n\t return isArray(this._months) ? this._months :\n\t this._months['standalone'];\n\t }\n\t return isArray(this._months) ? this._months[m.month()] :\n\t this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n\t}\n\t\n\tvar defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n\tfunction localeMonthsShort (m, format) {\n\t if (!m) {\n\t return isArray(this._monthsShort) ? this._monthsShort :\n\t this._monthsShort['standalone'];\n\t }\n\t return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n\t this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n\t}\n\t\n\tfunction handleStrictParse(monthName, format, strict) {\n\t var i, ii, mom, llc = monthName.toLocaleLowerCase();\n\t if (!this._monthsParse) {\n\t // this is not used\n\t this._monthsParse = [];\n\t this._longMonthsParse = [];\n\t this._shortMonthsParse = [];\n\t for (i = 0; i < 12; ++i) {\n\t mom = createUTC([2000, i]);\n\t this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n\t this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n\t }\n\t }\n\t\n\t if (strict) {\n\t if (format === 'MMM') {\n\t ii = indexOf$1.call(this._shortMonthsParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else {\n\t ii = indexOf$1.call(this._longMonthsParse, llc);\n\t return ii !== -1 ? ii : null;\n\t }\n\t } else {\n\t if (format === 'MMM') {\n\t ii = indexOf$1.call(this._shortMonthsParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf$1.call(this._longMonthsParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else {\n\t ii = indexOf$1.call(this._longMonthsParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf$1.call(this._shortMonthsParse, llc);\n\t return ii !== -1 ? ii : null;\n\t }\n\t }\n\t}\n\t\n\tfunction localeMonthsParse (monthName, format, strict) {\n\t var i, mom, regex;\n\t\n\t if (this._monthsParseExact) {\n\t return handleStrictParse.call(this, monthName, format, strict);\n\t }\n\t\n\t if (!this._monthsParse) {\n\t this._monthsParse = [];\n\t this._longMonthsParse = [];\n\t this._shortMonthsParse = [];\n\t }\n\t\n\t // TODO: add sorting\n\t // Sorting makes sure if one month (or abbr) is a prefix of another\n\t // see sorting in computeMonthsParse\n\t for (i = 0; i < 12; i++) {\n\t // make the regex if we don't have it already\n\t mom = createUTC([2000, i]);\n\t if (strict && !this._longMonthsParse[i]) {\n\t this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n\t this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n\t }\n\t if (!strict && !this._monthsParse[i]) {\n\t regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n\t this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t }\n\t // test the regex\n\t if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n\t return i;\n\t } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n\t return i;\n\t } else if (!strict && this._monthsParse[i].test(monthName)) {\n\t return i;\n\t }\n\t }\n\t}\n\t\n\t// MOMENTS\n\t\n\tfunction setMonth (mom, value) {\n\t var dayOfMonth;\n\t\n\t if (!mom.isValid()) {\n\t // No op\n\t return mom;\n\t }\n\t\n\t if (typeof value === 'string') {\n\t if (/^\\d+$/.test(value)) {\n\t value = toInt(value);\n\t } else {\n\t value = mom.localeData().monthsParse(value);\n\t // TODO: Another silent failure?\n\t if (!isNumber(value)) {\n\t return mom;\n\t }\n\t }\n\t }\n\t\n\t dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n\t mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n\t return mom;\n\t}\n\t\n\tfunction getSetMonth (value) {\n\t if (value != null) {\n\t setMonth(this, value);\n\t hooks.updateOffset(this, true);\n\t return this;\n\t } else {\n\t return get(this, 'Month');\n\t }\n\t}\n\t\n\tfunction getDaysInMonth () {\n\t return daysInMonth(this.year(), this.month());\n\t}\n\t\n\tvar defaultMonthsShortRegex = matchWord;\n\tfunction monthsShortRegex (isStrict) {\n\t if (this._monthsParseExact) {\n\t if (!hasOwnProp(this, '_monthsRegex')) {\n\t computeMonthsParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._monthsShortStrictRegex;\n\t } else {\n\t return this._monthsShortRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_monthsShortRegex')) {\n\t this._monthsShortRegex = defaultMonthsShortRegex;\n\t }\n\t return this._monthsShortStrictRegex && isStrict ?\n\t this._monthsShortStrictRegex : this._monthsShortRegex;\n\t }\n\t}\n\t\n\tvar defaultMonthsRegex = matchWord;\n\tfunction monthsRegex (isStrict) {\n\t if (this._monthsParseExact) {\n\t if (!hasOwnProp(this, '_monthsRegex')) {\n\t computeMonthsParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._monthsStrictRegex;\n\t } else {\n\t return this._monthsRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_monthsRegex')) {\n\t this._monthsRegex = defaultMonthsRegex;\n\t }\n\t return this._monthsStrictRegex && isStrict ?\n\t this._monthsStrictRegex : this._monthsRegex;\n\t }\n\t}\n\t\n\tfunction computeMonthsParse () {\n\t function cmpLenRev(a, b) {\n\t return b.length - a.length;\n\t }\n\t\n\t var shortPieces = [], longPieces = [], mixedPieces = [],\n\t i, mom;\n\t for (i = 0; i < 12; i++) {\n\t // make the regex if we don't have it already\n\t mom = createUTC([2000, i]);\n\t shortPieces.push(this.monthsShort(mom, ''));\n\t longPieces.push(this.months(mom, ''));\n\t mixedPieces.push(this.months(mom, ''));\n\t mixedPieces.push(this.monthsShort(mom, ''));\n\t }\n\t // Sorting makes sure if one month (or abbr) is a prefix of another it\n\t // will match the longer piece.\n\t shortPieces.sort(cmpLenRev);\n\t longPieces.sort(cmpLenRev);\n\t mixedPieces.sort(cmpLenRev);\n\t for (i = 0; i < 12; i++) {\n\t shortPieces[i] = regexEscape(shortPieces[i]);\n\t longPieces[i] = regexEscape(longPieces[i]);\n\t }\n\t for (i = 0; i < 24; i++) {\n\t mixedPieces[i] = regexEscape(mixedPieces[i]);\n\t }\n\t\n\t this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t this._monthsShortRegex = this._monthsRegex;\n\t this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n\t this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('Y', 0, 0, function () {\n\t var y = this.year();\n\t return y <= 9999 ? '' + y : '+' + y;\n\t});\n\t\n\taddFormatToken(0, ['YY', 2], 0, function () {\n\t return this.year() % 100;\n\t});\n\t\n\taddFormatToken(0, ['YYYY', 4], 0, 'year');\n\taddFormatToken(0, ['YYYYY', 5], 0, 'year');\n\taddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('year', 'y');\n\t\n\t// PRIORITIES\n\t\n\taddUnitPriority('year', 1);\n\t\n\t// PARSING\n\t\n\taddRegexToken('Y', matchSigned);\n\taddRegexToken('YY', match1to2, match2);\n\taddRegexToken('YYYY', match1to4, match4);\n\taddRegexToken('YYYYY', match1to6, match6);\n\taddRegexToken('YYYYYY', match1to6, match6);\n\t\n\taddParseToken(['YYYYY', 'YYYYYY'], YEAR);\n\taddParseToken('YYYY', function (input, array) {\n\t array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n\t});\n\taddParseToken('YY', function (input, array) {\n\t array[YEAR] = hooks.parseTwoDigitYear(input);\n\t});\n\taddParseToken('Y', function (input, array) {\n\t array[YEAR] = parseInt(input, 10);\n\t});\n\t\n\t// HELPERS\n\t\n\tfunction daysInYear(year) {\n\t return isLeapYear(year) ? 366 : 365;\n\t}\n\t\n\tfunction isLeapYear(year) {\n\t return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n\t}\n\t\n\t// HOOKS\n\t\n\thooks.parseTwoDigitYear = function (input) {\n\t return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n\t};\n\t\n\t// MOMENTS\n\t\n\tvar getSetYear = makeGetSet('FullYear', true);\n\t\n\tfunction getIsLeapYear () {\n\t return isLeapYear(this.year());\n\t}\n\t\n\tfunction createDate (y, m, d, h, M, s, ms) {\n\t // can't just apply() to create a date:\n\t // https://stackoverflow.com/q/181348\n\t var date = new Date(y, m, d, h, M, s, ms);\n\t\n\t // the date constructor remaps years 0-99 to 1900-1999\n\t if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n\t date.setFullYear(y);\n\t }\n\t return date;\n\t}\n\t\n\tfunction createUTCDate (y) {\n\t var date = new Date(Date.UTC.apply(null, arguments));\n\t\n\t // the Date.UTC function remaps years 0-99 to 1900-1999\n\t if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n\t date.setUTCFullYear(y);\n\t }\n\t return date;\n\t}\n\t\n\t// start-of-first-week - start-of-year\n\tfunction firstWeekOffset(year, dow, doy) {\n\t var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n\t fwd = 7 + dow - doy,\n\t // first-week day local weekday -- which local weekday is fwd\n\t fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\t\n\t return -fwdlw + fwd - 1;\n\t}\n\t\n\t// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n\tfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n\t var localWeekday = (7 + weekday - dow) % 7,\n\t weekOffset = firstWeekOffset(year, dow, doy),\n\t dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n\t resYear, resDayOfYear;\n\t\n\t if (dayOfYear <= 0) {\n\t resYear = year - 1;\n\t resDayOfYear = daysInYear(resYear) + dayOfYear;\n\t } else if (dayOfYear > daysInYear(year)) {\n\t resYear = year + 1;\n\t resDayOfYear = dayOfYear - daysInYear(year);\n\t } else {\n\t resYear = year;\n\t resDayOfYear = dayOfYear;\n\t }\n\t\n\t return {\n\t year: resYear,\n\t dayOfYear: resDayOfYear\n\t };\n\t}\n\t\n\tfunction weekOfYear(mom, dow, doy) {\n\t var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n\t week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n\t resWeek, resYear;\n\t\n\t if (week < 1) {\n\t resYear = mom.year() - 1;\n\t resWeek = week + weeksInYear(resYear, dow, doy);\n\t } else if (week > weeksInYear(mom.year(), dow, doy)) {\n\t resWeek = week - weeksInYear(mom.year(), dow, doy);\n\t resYear = mom.year() + 1;\n\t } else {\n\t resYear = mom.year();\n\t resWeek = week;\n\t }\n\t\n\t return {\n\t week: resWeek,\n\t year: resYear\n\t };\n\t}\n\t\n\tfunction weeksInYear(year, dow, doy) {\n\t var weekOffset = firstWeekOffset(year, dow, doy),\n\t weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n\t return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('w', ['ww', 2], 'wo', 'week');\n\taddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('week', 'w');\n\taddUnitAlias('isoWeek', 'W');\n\t\n\t// PRIORITIES\n\t\n\taddUnitPriority('week', 5);\n\taddUnitPriority('isoWeek', 5);\n\t\n\t// PARSING\n\t\n\taddRegexToken('w', match1to2);\n\taddRegexToken('ww', match1to2, match2);\n\taddRegexToken('W', match1to2);\n\taddRegexToken('WW', match1to2, match2);\n\t\n\taddWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n\t week[token.substr(0, 1)] = toInt(input);\n\t});\n\t\n\t// HELPERS\n\t\n\t// LOCALES\n\t\n\tfunction localeWeek (mom) {\n\t return weekOfYear(mom, this._week.dow, this._week.doy).week;\n\t}\n\t\n\tvar defaultLocaleWeek = {\n\t dow : 0, // Sunday is the first day of the week.\n\t doy : 6 // The week that contains Jan 1st is the first week of the year.\n\t};\n\t\n\tfunction localeFirstDayOfWeek () {\n\t return this._week.dow;\n\t}\n\t\n\tfunction localeFirstDayOfYear () {\n\t return this._week.doy;\n\t}\n\t\n\t// MOMENTS\n\t\n\tfunction getSetWeek (input) {\n\t var week = this.localeData().week(this);\n\t return input == null ? week : this.add((input - week) * 7, 'd');\n\t}\n\t\n\tfunction getSetISOWeek (input) {\n\t var week = weekOfYear(this, 1, 4).week;\n\t return input == null ? week : this.add((input - week) * 7, 'd');\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('d', 0, 'do', 'day');\n\t\n\taddFormatToken('dd', 0, 0, function (format) {\n\t return this.localeData().weekdaysMin(this, format);\n\t});\n\t\n\taddFormatToken('ddd', 0, 0, function (format) {\n\t return this.localeData().weekdaysShort(this, format);\n\t});\n\t\n\taddFormatToken('dddd', 0, 0, function (format) {\n\t return this.localeData().weekdays(this, format);\n\t});\n\t\n\taddFormatToken('e', 0, 0, 'weekday');\n\taddFormatToken('E', 0, 0, 'isoWeekday');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('day', 'd');\n\taddUnitAlias('weekday', 'e');\n\taddUnitAlias('isoWeekday', 'E');\n\t\n\t// PRIORITY\n\taddUnitPriority('day', 11);\n\taddUnitPriority('weekday', 11);\n\taddUnitPriority('isoWeekday', 11);\n\t\n\t// PARSING\n\t\n\taddRegexToken('d', match1to2);\n\taddRegexToken('e', match1to2);\n\taddRegexToken('E', match1to2);\n\taddRegexToken('dd', function (isStrict, locale) {\n\t return locale.weekdaysMinRegex(isStrict);\n\t});\n\taddRegexToken('ddd', function (isStrict, locale) {\n\t return locale.weekdaysShortRegex(isStrict);\n\t});\n\taddRegexToken('dddd', function (isStrict, locale) {\n\t return locale.weekdaysRegex(isStrict);\n\t});\n\t\n\taddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n\t var weekday = config._locale.weekdaysParse(input, token, config._strict);\n\t // if we didn't get a weekday name, mark the date as invalid\n\t if (weekday != null) {\n\t week.d = weekday;\n\t } else {\n\t getParsingFlags(config).invalidWeekday = input;\n\t }\n\t});\n\t\n\taddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n\t week[token] = toInt(input);\n\t});\n\t\n\t// HELPERS\n\t\n\tfunction parseWeekday(input, locale) {\n\t if (typeof input !== 'string') {\n\t return input;\n\t }\n\t\n\t if (!isNaN(input)) {\n\t return parseInt(input, 10);\n\t }\n\t\n\t input = locale.weekdaysParse(input);\n\t if (typeof input === 'number') {\n\t return input;\n\t }\n\t\n\t return null;\n\t}\n\t\n\tfunction parseIsoWeekday(input, locale) {\n\t if (typeof input === 'string') {\n\t return locale.weekdaysParse(input) % 7 || 7;\n\t }\n\t return isNaN(input) ? null : input;\n\t}\n\t\n\t// LOCALES\n\t\n\tvar defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n\tfunction localeWeekdays (m, format) {\n\t if (!m) {\n\t return isArray(this._weekdays) ? this._weekdays :\n\t this._weekdays['standalone'];\n\t }\n\t return isArray(this._weekdays) ? this._weekdays[m.day()] :\n\t this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n\t}\n\t\n\tvar defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n\tfunction localeWeekdaysShort (m) {\n\t return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n\t}\n\t\n\tvar defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n\tfunction localeWeekdaysMin (m) {\n\t return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n\t}\n\t\n\tfunction handleStrictParse$1(weekdayName, format, strict) {\n\t var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n\t if (!this._weekdaysParse) {\n\t this._weekdaysParse = [];\n\t this._shortWeekdaysParse = [];\n\t this._minWeekdaysParse = [];\n\t\n\t for (i = 0; i < 7; ++i) {\n\t mom = createUTC([2000, 1]).day(i);\n\t this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n\t this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n\t this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n\t }\n\t }\n\t\n\t if (strict) {\n\t if (format === 'dddd') {\n\t ii = indexOf$1.call(this._weekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else if (format === 'ddd') {\n\t ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else {\n\t ii = indexOf$1.call(this._minWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t }\n\t } else {\n\t if (format === 'dddd') {\n\t ii = indexOf$1.call(this._weekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf$1.call(this._minWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else if (format === 'ddd') {\n\t ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf$1.call(this._weekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf$1.call(this._minWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t } else {\n\t ii = indexOf$1.call(this._minWeekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf$1.call(this._weekdaysParse, llc);\n\t if (ii !== -1) {\n\t return ii;\n\t }\n\t ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n\t return ii !== -1 ? ii : null;\n\t }\n\t }\n\t}\n\t\n\tfunction localeWeekdaysParse (weekdayName, format, strict) {\n\t var i, mom, regex;\n\t\n\t if (this._weekdaysParseExact) {\n\t return handleStrictParse$1.call(this, weekdayName, format, strict);\n\t }\n\t\n\t if (!this._weekdaysParse) {\n\t this._weekdaysParse = [];\n\t this._minWeekdaysParse = [];\n\t this._shortWeekdaysParse = [];\n\t this._fullWeekdaysParse = [];\n\t }\n\t\n\t for (i = 0; i < 7; i++) {\n\t // make the regex if we don't have it already\n\t\n\t mom = createUTC([2000, 1]).day(i);\n\t if (strict && !this._fullWeekdaysParse[i]) {\n\t this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n\t this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n\t this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n\t }\n\t if (!this._weekdaysParse[i]) {\n\t regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n\t this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n\t }\n\t // test the regex\n\t if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n\t return i;\n\t } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n\t return i;\n\t } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n\t return i;\n\t } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n\t return i;\n\t }\n\t }\n\t}\n\t\n\t// MOMENTS\n\t\n\tfunction getSetDayOfWeek (input) {\n\t if (!this.isValid()) {\n\t return input != null ? this : NaN;\n\t }\n\t var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n\t if (input != null) {\n\t input = parseWeekday(input, this.localeData());\n\t return this.add(input - day, 'd');\n\t } else {\n\t return day;\n\t }\n\t}\n\t\n\tfunction getSetLocaleDayOfWeek (input) {\n\t if (!this.isValid()) {\n\t return input != null ? this : NaN;\n\t }\n\t var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n\t return input == null ? weekday : this.add(input - weekday, 'd');\n\t}\n\t\n\tfunction getSetISODayOfWeek (input) {\n\t if (!this.isValid()) {\n\t return input != null ? this : NaN;\n\t }\n\t\n\t // behaves the same as moment#day except\n\t // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n\t // as a setter, sunday should belong to the previous week.\n\t\n\t if (input != null) {\n\t var weekday = parseIsoWeekday(input, this.localeData());\n\t return this.day(this.day() % 7 ? weekday : weekday - 7);\n\t } else {\n\t return this.day() || 7;\n\t }\n\t}\n\t\n\tvar defaultWeekdaysRegex = matchWord;\n\tfunction weekdaysRegex (isStrict) {\n\t if (this._weekdaysParseExact) {\n\t if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t computeWeekdaysParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._weekdaysStrictRegex;\n\t } else {\n\t return this._weekdaysRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t this._weekdaysRegex = defaultWeekdaysRegex;\n\t }\n\t return this._weekdaysStrictRegex && isStrict ?\n\t this._weekdaysStrictRegex : this._weekdaysRegex;\n\t }\n\t}\n\t\n\tvar defaultWeekdaysShortRegex = matchWord;\n\tfunction weekdaysShortRegex (isStrict) {\n\t if (this._weekdaysParseExact) {\n\t if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t computeWeekdaysParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._weekdaysShortStrictRegex;\n\t } else {\n\t return this._weekdaysShortRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n\t this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n\t }\n\t return this._weekdaysShortStrictRegex && isStrict ?\n\t this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n\t }\n\t}\n\t\n\tvar defaultWeekdaysMinRegex = matchWord;\n\tfunction weekdaysMinRegex (isStrict) {\n\t if (this._weekdaysParseExact) {\n\t if (!hasOwnProp(this, '_weekdaysRegex')) {\n\t computeWeekdaysParse.call(this);\n\t }\n\t if (isStrict) {\n\t return this._weekdaysMinStrictRegex;\n\t } else {\n\t return this._weekdaysMinRegex;\n\t }\n\t } else {\n\t if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n\t this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n\t }\n\t return this._weekdaysMinStrictRegex && isStrict ?\n\t this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n\t }\n\t}\n\t\n\t\n\tfunction computeWeekdaysParse () {\n\t function cmpLenRev(a, b) {\n\t return b.length - a.length;\n\t }\n\t\n\t var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n\t i, mom, minp, shortp, longp;\n\t for (i = 0; i < 7; i++) {\n\t // make the regex if we don't have it already\n\t mom = createUTC([2000, 1]).day(i);\n\t minp = this.weekdaysMin(mom, '');\n\t shortp = this.weekdaysShort(mom, '');\n\t longp = this.weekdays(mom, '');\n\t minPieces.push(minp);\n\t shortPieces.push(shortp);\n\t longPieces.push(longp);\n\t mixedPieces.push(minp);\n\t mixedPieces.push(shortp);\n\t mixedPieces.push(longp);\n\t }\n\t // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n\t // will match the longer piece.\n\t minPieces.sort(cmpLenRev);\n\t shortPieces.sort(cmpLenRev);\n\t longPieces.sort(cmpLenRev);\n\t mixedPieces.sort(cmpLenRev);\n\t for (i = 0; i < 7; i++) {\n\t shortPieces[i] = regexEscape(shortPieces[i]);\n\t longPieces[i] = regexEscape(longPieces[i]);\n\t mixedPieces[i] = regexEscape(mixedPieces[i]);\n\t }\n\t\n\t this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n\t this._weekdaysShortRegex = this._weekdaysRegex;\n\t this._weekdaysMinRegex = this._weekdaysRegex;\n\t\n\t this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n\t this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n\t this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n\t}\n\t\n\t// FORMATTING\n\t\n\tfunction hFormat() {\n\t return this.hours() % 12 || 12;\n\t}\n\t\n\tfunction kFormat() {\n\t return this.hours() || 24;\n\t}\n\t\n\taddFormatToken('H', ['HH', 2], 0, 'hour');\n\taddFormatToken('h', ['hh', 2], 0, hFormat);\n\taddFormatToken('k', ['kk', 2], 0, kFormat);\n\t\n\taddFormatToken('hmm', 0, 0, function () {\n\t return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n\t});\n\t\n\taddFormatToken('hmmss', 0, 0, function () {\n\t return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n\t zeroFill(this.seconds(), 2);\n\t});\n\t\n\taddFormatToken('Hmm', 0, 0, function () {\n\t return '' + this.hours() + zeroFill(this.minutes(), 2);\n\t});\n\t\n\taddFormatToken('Hmmss', 0, 0, function () {\n\t return '' + this.hours() + zeroFill(this.minutes(), 2) +\n\t zeroFill(this.seconds(), 2);\n\t});\n\t\n\tfunction meridiem (token, lowercase) {\n\t addFormatToken(token, 0, 0, function () {\n\t return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n\t });\n\t}\n\t\n\tmeridiem('a', true);\n\tmeridiem('A', false);\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('hour', 'h');\n\t\n\t// PRIORITY\n\taddUnitPriority('hour', 13);\n\t\n\t// PARSING\n\t\n\tfunction matchMeridiem (isStrict, locale) {\n\t return locale._meridiemParse;\n\t}\n\t\n\taddRegexToken('a', matchMeridiem);\n\taddRegexToken('A', matchMeridiem);\n\taddRegexToken('H', match1to2);\n\taddRegexToken('h', match1to2);\n\taddRegexToken('k', match1to2);\n\taddRegexToken('HH', match1to2, match2);\n\taddRegexToken('hh', match1to2, match2);\n\taddRegexToken('kk', match1to2, match2);\n\t\n\taddRegexToken('hmm', match3to4);\n\taddRegexToken('hmmss', match5to6);\n\taddRegexToken('Hmm', match3to4);\n\taddRegexToken('Hmmss', match5to6);\n\t\n\taddParseToken(['H', 'HH'], HOUR);\n\taddParseToken(['k', 'kk'], function (input, array, config) {\n\t var kInput = toInt(input);\n\t array[HOUR] = kInput === 24 ? 0 : kInput;\n\t});\n\taddParseToken(['a', 'A'], function (input, array, config) {\n\t config._isPm = config._locale.isPM(input);\n\t config._meridiem = input;\n\t});\n\taddParseToken(['h', 'hh'], function (input, array, config) {\n\t array[HOUR] = toInt(input);\n\t getParsingFlags(config).bigHour = true;\n\t});\n\taddParseToken('hmm', function (input, array, config) {\n\t var pos = input.length - 2;\n\t array[HOUR] = toInt(input.substr(0, pos));\n\t array[MINUTE] = toInt(input.substr(pos));\n\t getParsingFlags(config).bigHour = true;\n\t});\n\taddParseToken('hmmss', function (input, array, config) {\n\t var pos1 = input.length - 4;\n\t var pos2 = input.length - 2;\n\t array[HOUR] = toInt(input.substr(0, pos1));\n\t array[MINUTE] = toInt(input.substr(pos1, 2));\n\t array[SECOND] = toInt(input.substr(pos2));\n\t getParsingFlags(config).bigHour = true;\n\t});\n\taddParseToken('Hmm', function (input, array, config) {\n\t var pos = input.length - 2;\n\t array[HOUR] = toInt(input.substr(0, pos));\n\t array[MINUTE] = toInt(input.substr(pos));\n\t});\n\taddParseToken('Hmmss', function (input, array, config) {\n\t var pos1 = input.length - 4;\n\t var pos2 = input.length - 2;\n\t array[HOUR] = toInt(input.substr(0, pos1));\n\t array[MINUTE] = toInt(input.substr(pos1, 2));\n\t array[SECOND] = toInt(input.substr(pos2));\n\t});\n\t\n\t// LOCALES\n\t\n\tfunction localeIsPM (input) {\n\t // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n\t // Using charAt should be more compatible.\n\t return ((input + '').toLowerCase().charAt(0) === 'p');\n\t}\n\t\n\tvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n\tfunction localeMeridiem (hours, minutes, isLower) {\n\t if (hours > 11) {\n\t return isLower ? 'pm' : 'PM';\n\t } else {\n\t return isLower ? 'am' : 'AM';\n\t }\n\t}\n\t\n\t\n\t// MOMENTS\n\t\n\t// Setting the hour should keep the time, because the user explicitly\n\t// specified which hour he wants. So trying to maintain the same hour (in\n\t// a new timezone) makes sense. Adding/subtracting hours does not follow\n\t// this rule.\n\tvar getSetHour = makeGetSet('Hours', true);\n\t\n\t// months\n\t// week\n\t// weekdays\n\t// meridiem\n\tvar baseConfig = {\n\t calendar: defaultCalendar,\n\t longDateFormat: defaultLongDateFormat,\n\t invalidDate: defaultInvalidDate,\n\t ordinal: defaultOrdinal,\n\t dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n\t relativeTime: defaultRelativeTime,\n\t\n\t months: defaultLocaleMonths,\n\t monthsShort: defaultLocaleMonthsShort,\n\t\n\t week: defaultLocaleWeek,\n\t\n\t weekdays: defaultLocaleWeekdays,\n\t weekdaysMin: defaultLocaleWeekdaysMin,\n\t weekdaysShort: defaultLocaleWeekdaysShort,\n\t\n\t meridiemParse: defaultLocaleMeridiemParse\n\t};\n\t\n\t// internal storage for locale config files\n\tvar locales = {};\n\tvar localeFamilies = {};\n\tvar globalLocale;\n\t\n\tfunction normalizeLocale(key) {\n\t return key ? key.toLowerCase().replace('_', '-') : key;\n\t}\n\t\n\t// pick the locale from the array\n\t// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n\t// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n\tfunction chooseLocale(names) {\n\t var i = 0, j, next, locale, split;\n\t\n\t while (i < names.length) {\n\t split = normalizeLocale(names[i]).split('-');\n\t j = split.length;\n\t next = normalizeLocale(names[i + 1]);\n\t next = next ? next.split('-') : null;\n\t while (j > 0) {\n\t locale = loadLocale(split.slice(0, j).join('-'));\n\t if (locale) {\n\t return locale;\n\t }\n\t if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n\t //the next array item is better than a shallower substring of this one\n\t break;\n\t }\n\t j--;\n\t }\n\t i++;\n\t }\n\t return null;\n\t}\n\t\n\tfunction loadLocale(name) {\n\t var oldLocale = null;\n\t // TODO: Find a better way to register and load all the locales in Node\n\t if (!locales[name] && (typeof module !== 'undefined') &&\n\t module && module.exports) {\n\t try {\n\t oldLocale = globalLocale._abbr;\n\t __webpack_require__(557)(\"./\" + name);\n\t // because defineLocale currently also sets the global locale, we\n\t // want to undo that for lazy loaded locales\n\t getSetGlobalLocale(oldLocale);\n\t } catch (e) { }\n\t }\n\t return locales[name];\n\t}\n\t\n\t// This function will load locale and then set the global locale. If\n\t// no arguments are passed in, it will simply return the current global\n\t// locale key.\n\tfunction getSetGlobalLocale (key, values) {\n\t var data;\n\t if (key) {\n\t if (isUndefined(values)) {\n\t data = getLocale(key);\n\t }\n\t else {\n\t data = defineLocale(key, values);\n\t }\n\t\n\t if (data) {\n\t // moment.duration._locale = moment._locale = data;\n\t globalLocale = data;\n\t }\n\t }\n\t\n\t return globalLocale._abbr;\n\t}\n\t\n\tfunction defineLocale (name, config) {\n\t if (config !== null) {\n\t var parentConfig = baseConfig;\n\t config.abbr = name;\n\t if (locales[name] != null) {\n\t deprecateSimple('defineLocaleOverride',\n\t 'use moment.updateLocale(localeName, config) to change ' +\n\t 'an existing locale. moment.defineLocale(localeName, ' +\n\t 'config) should only be used for creating a new locale ' +\n\t 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n\t parentConfig = locales[name]._config;\n\t } else if (config.parentLocale != null) {\n\t if (locales[config.parentLocale] != null) {\n\t parentConfig = locales[config.parentLocale]._config;\n\t } else {\n\t if (!localeFamilies[config.parentLocale]) {\n\t localeFamilies[config.parentLocale] = [];\n\t }\n\t localeFamilies[config.parentLocale].push({\n\t name: name,\n\t config: config\n\t });\n\t return null;\n\t }\n\t }\n\t locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\t\n\t if (localeFamilies[name]) {\n\t localeFamilies[name].forEach(function (x) {\n\t defineLocale(x.name, x.config);\n\t });\n\t }\n\t\n\t // backwards compat for now: also set the locale\n\t // make sure we set the locale AFTER all child locales have been\n\t // created, so we won't end up with the child locale set.\n\t getSetGlobalLocale(name);\n\t\n\t\n\t return locales[name];\n\t } else {\n\t // useful for testing\n\t delete locales[name];\n\t return null;\n\t }\n\t}\n\t\n\tfunction updateLocale(name, config) {\n\t if (config != null) {\n\t var locale, parentConfig = baseConfig;\n\t // MERGE\n\t if (locales[name] != null) {\n\t parentConfig = locales[name]._config;\n\t }\n\t config = mergeConfigs(parentConfig, config);\n\t locale = new Locale(config);\n\t locale.parentLocale = locales[name];\n\t locales[name] = locale;\n\t\n\t // backwards compat for now: also set the locale\n\t getSetGlobalLocale(name);\n\t } else {\n\t // pass null for config to unupdate, useful for tests\n\t if (locales[name] != null) {\n\t if (locales[name].parentLocale != null) {\n\t locales[name] = locales[name].parentLocale;\n\t } else if (locales[name] != null) {\n\t delete locales[name];\n\t }\n\t }\n\t }\n\t return locales[name];\n\t}\n\t\n\t// returns locale data\n\tfunction getLocale (key) {\n\t var locale;\n\t\n\t if (key && key._locale && key._locale._abbr) {\n\t key = key._locale._abbr;\n\t }\n\t\n\t if (!key) {\n\t return globalLocale;\n\t }\n\t\n\t if (!isArray(key)) {\n\t //short-circuit everything else\n\t locale = loadLocale(key);\n\t if (locale) {\n\t return locale;\n\t }\n\t key = [key];\n\t }\n\t\n\t return chooseLocale(key);\n\t}\n\t\n\tfunction listLocales() {\n\t return keys$1(locales);\n\t}\n\t\n\tfunction checkOverflow (m) {\n\t var overflow;\n\t var a = m._a;\n\t\n\t if (a && getParsingFlags(m).overflow === -2) {\n\t overflow =\n\t a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :\n\t a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n\t a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n\t a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :\n\t a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :\n\t a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n\t -1;\n\t\n\t if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n\t overflow = DATE;\n\t }\n\t if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n\t overflow = WEEK;\n\t }\n\t if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n\t overflow = WEEKDAY;\n\t }\n\t\n\t getParsingFlags(m).overflow = overflow;\n\t }\n\t\n\t return m;\n\t}\n\t\n\t// iso 8601 regex\n\t// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n\tvar extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\tvar basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\t\n\tvar tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\t\n\tvar isoDates = [\n\t ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n\t ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n\t ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n\t ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n\t ['YYYY-DDD', /\\d{4}-\\d{3}/],\n\t ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n\t ['YYYYYYMMDD', /[+-]\\d{10}/],\n\t ['YYYYMMDD', /\\d{8}/],\n\t // YYYYMM is NOT allowed by the standard\n\t ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n\t ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n\t ['YYYYDDD', /\\d{7}/]\n\t];\n\t\n\t// iso time formats and regexes\n\tvar isoTimes = [\n\t ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n\t ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n\t ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n\t ['HH:mm', /\\d\\d:\\d\\d/],\n\t ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n\t ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n\t ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n\t ['HHmm', /\\d\\d\\d\\d/],\n\t ['HH', /\\d\\d/]\n\t];\n\t\n\tvar aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\t\n\t// date from iso format\n\tfunction configFromISO(config) {\n\t var i, l,\n\t string = config._i,\n\t match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n\t allowTime, dateFormat, timeFormat, tzFormat;\n\t\n\t if (match) {\n\t getParsingFlags(config).iso = true;\n\t\n\t for (i = 0, l = isoDates.length; i < l; i++) {\n\t if (isoDates[i][1].exec(match[1])) {\n\t dateFormat = isoDates[i][0];\n\t allowTime = isoDates[i][2] !== false;\n\t break;\n\t }\n\t }\n\t if (dateFormat == null) {\n\t config._isValid = false;\n\t return;\n\t }\n\t if (match[3]) {\n\t for (i = 0, l = isoTimes.length; i < l; i++) {\n\t if (isoTimes[i][1].exec(match[3])) {\n\t // match[2] should be 'T' or space\n\t timeFormat = (match[2] || ' ') + isoTimes[i][0];\n\t break;\n\t }\n\t }\n\t if (timeFormat == null) {\n\t config._isValid = false;\n\t return;\n\t }\n\t }\n\t if (!allowTime && timeFormat != null) {\n\t config._isValid = false;\n\t return;\n\t }\n\t if (match[4]) {\n\t if (tzRegex.exec(match[4])) {\n\t tzFormat = 'Z';\n\t } else {\n\t config._isValid = false;\n\t return;\n\t }\n\t }\n\t config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n\t configFromStringAndFormat(config);\n\t } else {\n\t config._isValid = false;\n\t }\n\t}\n\t\n\t// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n\tvar basicRfcRegex = /^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d?\\d\\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(?:\\d\\d)?\\d\\d\\s)(\\d\\d:\\d\\d)(\\:\\d\\d)?(\\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\\d{4}))$/;\n\t\n\t// date and time from ref 2822 format\n\tfunction configFromRFC2822(config) {\n\t var string, match, dayFormat,\n\t dateFormat, timeFormat, tzFormat;\n\t var timezones = {\n\t ' GMT': ' +0000',\n\t ' EDT': ' -0400',\n\t ' EST': ' -0500',\n\t ' CDT': ' -0500',\n\t ' CST': ' -0600',\n\t ' MDT': ' -0600',\n\t ' MST': ' -0700',\n\t ' PDT': ' -0700',\n\t ' PST': ' -0800'\n\t };\n\t var military = 'YXWVUTSRQPONZABCDEFGHIKLM';\n\t var timezone, timezoneIndex;\n\t\n\t string = config._i\n\t .replace(/\\([^\\)]*\\)|[\\n\\t]/g, ' ') // Remove comments and folding whitespace\n\t .replace(/(\\s\\s+)/g, ' ') // Replace multiple-spaces with a single space\n\t .replace(/^\\s|\\s$/g, ''); // Remove leading and trailing spaces\n\t match = basicRfcRegex.exec(string);\n\t\n\t if (match) {\n\t dayFormat = match[1] ? 'ddd' + ((match[1].length === 5) ? ', ' : ' ') : '';\n\t dateFormat = 'D MMM ' + ((match[2].length > 10) ? 'YYYY ' : 'YY ');\n\t timeFormat = 'HH:mm' + (match[4] ? ':ss' : '');\n\t\n\t // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n\t if (match[1]) { // day of week given\n\t var momentDate = new Date(match[2]);\n\t var momentDay = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'][momentDate.getDay()];\n\t\n\t if (match[1].substr(0,3) !== momentDay) {\n\t getParsingFlags(config).weekdayMismatch = true;\n\t config._isValid = false;\n\t return;\n\t }\n\t }\n\t\n\t switch (match[5].length) {\n\t case 2: // military\n\t if (timezoneIndex === 0) {\n\t timezone = ' +0000';\n\t } else {\n\t timezoneIndex = military.indexOf(match[5][1].toUpperCase()) - 12;\n\t timezone = ((timezoneIndex < 0) ? ' -' : ' +') +\n\t (('' + timezoneIndex).replace(/^-?/, '0')).match(/..$/)[0] + '00';\n\t }\n\t break;\n\t case 4: // Zone\n\t timezone = timezones[match[5]];\n\t break;\n\t default: // UT or +/-9999\n\t timezone = timezones[' GMT'];\n\t }\n\t match[5] = timezone;\n\t config._i = match.splice(1).join('');\n\t tzFormat = ' ZZ';\n\t config._f = dayFormat + dateFormat + timeFormat + tzFormat;\n\t configFromStringAndFormat(config);\n\t getParsingFlags(config).rfc2822 = true;\n\t } else {\n\t config._isValid = false;\n\t }\n\t}\n\t\n\t// date from iso format or fallback\n\tfunction configFromString(config) {\n\t var matched = aspNetJsonRegex.exec(config._i);\n\t\n\t if (matched !== null) {\n\t config._d = new Date(+matched[1]);\n\t return;\n\t }\n\t\n\t configFromISO(config);\n\t if (config._isValid === false) {\n\t delete config._isValid;\n\t } else {\n\t return;\n\t }\n\t\n\t configFromRFC2822(config);\n\t if (config._isValid === false) {\n\t delete config._isValid;\n\t } else {\n\t return;\n\t }\n\t\n\t // Final attempt, use Input Fallback\n\t hooks.createFromInputFallback(config);\n\t}\n\t\n\thooks.createFromInputFallback = deprecate(\n\t 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n\t 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n\t 'discouraged and will be removed in an upcoming major release. Please refer to ' +\n\t 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n\t function (config) {\n\t config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n\t }\n\t);\n\t\n\t// Pick the first defined of two or three arguments.\n\tfunction defaults(a, b, c) {\n\t if (a != null) {\n\t return a;\n\t }\n\t if (b != null) {\n\t return b;\n\t }\n\t return c;\n\t}\n\t\n\tfunction currentDateArray(config) {\n\t // hooks is actually the exported moment object\n\t var nowValue = new Date(hooks.now());\n\t if (config._useUTC) {\n\t return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n\t }\n\t return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n\t}\n\t\n\t// convert an array to a date.\n\t// the array should mirror the parameters below\n\t// note: all values past the year are optional and will default to the lowest possible value.\n\t// [year, month, day , hour, minute, second, millisecond]\n\tfunction configFromArray (config) {\n\t var i, date, input = [], currentDate, yearToUse;\n\t\n\t if (config._d) {\n\t return;\n\t }\n\t\n\t currentDate = currentDateArray(config);\n\t\n\t //compute day of the year from weeks and weekdays\n\t if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n\t dayOfYearFromWeekInfo(config);\n\t }\n\t\n\t //if the day of the year is set, figure out what it is\n\t if (config._dayOfYear != null) {\n\t yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\t\n\t if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n\t getParsingFlags(config)._overflowDayOfYear = true;\n\t }\n\t\n\t date = createUTCDate(yearToUse, 0, config._dayOfYear);\n\t config._a[MONTH] = date.getUTCMonth();\n\t config._a[DATE] = date.getUTCDate();\n\t }\n\t\n\t // Default to current date.\n\t // * if no year, month, day of month are given, default to today\n\t // * if day of month is given, default month and year\n\t // * if month is given, default only year\n\t // * if year is given, don't default anything\n\t for (i = 0; i < 3 && config._a[i] == null; ++i) {\n\t config._a[i] = input[i] = currentDate[i];\n\t }\n\t\n\t // Zero out whatever was not defaulted, including time\n\t for (; i < 7; i++) {\n\t config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n\t }\n\t\n\t // Check for 24:00:00.000\n\t if (config._a[HOUR] === 24 &&\n\t config._a[MINUTE] === 0 &&\n\t config._a[SECOND] === 0 &&\n\t config._a[MILLISECOND] === 0) {\n\t config._nextDay = true;\n\t config._a[HOUR] = 0;\n\t }\n\t\n\t config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n\t // Apply timezone offset from input. The actual utcOffset can be changed\n\t // with parseZone.\n\t if (config._tzm != null) {\n\t config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\t }\n\t\n\t if (config._nextDay) {\n\t config._a[HOUR] = 24;\n\t }\n\t}\n\t\n\tfunction dayOfYearFromWeekInfo(config) {\n\t var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\t\n\t w = config._w;\n\t if (w.GG != null || w.W != null || w.E != null) {\n\t dow = 1;\n\t doy = 4;\n\t\n\t // TODO: We need to take the current isoWeekYear, but that depends on\n\t // how we interpret now (local, utc, fixed offset). So create\n\t // a now version of current config (take local/utc/offset flags, and\n\t // create now).\n\t weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n\t week = defaults(w.W, 1);\n\t weekday = defaults(w.E, 1);\n\t if (weekday < 1 || weekday > 7) {\n\t weekdayOverflow = true;\n\t }\n\t } else {\n\t dow = config._locale._week.dow;\n\t doy = config._locale._week.doy;\n\t\n\t var curWeek = weekOfYear(createLocal(), dow, doy);\n\t\n\t weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\t\n\t // Default to current week.\n\t week = defaults(w.w, curWeek.week);\n\t\n\t if (w.d != null) {\n\t // weekday -- low day numbers are considered next week\n\t weekday = w.d;\n\t if (weekday < 0 || weekday > 6) {\n\t weekdayOverflow = true;\n\t }\n\t } else if (w.e != null) {\n\t // local weekday -- counting starts from begining of week\n\t weekday = w.e + dow;\n\t if (w.e < 0 || w.e > 6) {\n\t weekdayOverflow = true;\n\t }\n\t } else {\n\t // default to begining of week\n\t weekday = dow;\n\t }\n\t }\n\t if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n\t getParsingFlags(config)._overflowWeeks = true;\n\t } else if (weekdayOverflow != null) {\n\t getParsingFlags(config)._overflowWeekday = true;\n\t } else {\n\t temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n\t config._a[YEAR] = temp.year;\n\t config._dayOfYear = temp.dayOfYear;\n\t }\n\t}\n\t\n\t// constant that refers to the ISO standard\n\thooks.ISO_8601 = function () {};\n\t\n\t// constant that refers to the RFC 2822 form\n\thooks.RFC_2822 = function () {};\n\t\n\t// date from string and format string\n\tfunction configFromStringAndFormat(config) {\n\t // TODO: Move this to another part of the creation flow to prevent circular deps\n\t if (config._f === hooks.ISO_8601) {\n\t configFromISO(config);\n\t return;\n\t }\n\t if (config._f === hooks.RFC_2822) {\n\t configFromRFC2822(config);\n\t return;\n\t }\n\t config._a = [];\n\t getParsingFlags(config).empty = true;\n\t\n\t // This array is used to make a Date, either with `new Date` or `Date.UTC`\n\t var string = '' + config._i,\n\t i, parsedInput, tokens, token, skipped,\n\t stringLength = string.length,\n\t totalParsedInputLength = 0;\n\t\n\t tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\t\n\t for (i = 0; i < tokens.length; i++) {\n\t token = tokens[i];\n\t parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n\t // console.log('token', token, 'parsedInput', parsedInput,\n\t // 'regex', getParseRegexForToken(token, config));\n\t if (parsedInput) {\n\t skipped = string.substr(0, string.indexOf(parsedInput));\n\t if (skipped.length > 0) {\n\t getParsingFlags(config).unusedInput.push(skipped);\n\t }\n\t string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n\t totalParsedInputLength += parsedInput.length;\n\t }\n\t // don't parse if it's not a known token\n\t if (formatTokenFunctions[token]) {\n\t if (parsedInput) {\n\t getParsingFlags(config).empty = false;\n\t }\n\t else {\n\t getParsingFlags(config).unusedTokens.push(token);\n\t }\n\t addTimeToArrayFromToken(token, parsedInput, config);\n\t }\n\t else if (config._strict && !parsedInput) {\n\t getParsingFlags(config).unusedTokens.push(token);\n\t }\n\t }\n\t\n\t // add remaining unparsed input length to the string\n\t getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n\t if (string.length > 0) {\n\t getParsingFlags(config).unusedInput.push(string);\n\t }\n\t\n\t // clear _12h flag if hour is <= 12\n\t if (config._a[HOUR] <= 12 &&\n\t getParsingFlags(config).bigHour === true &&\n\t config._a[HOUR] > 0) {\n\t getParsingFlags(config).bigHour = undefined;\n\t }\n\t\n\t getParsingFlags(config).parsedDateParts = config._a.slice(0);\n\t getParsingFlags(config).meridiem = config._meridiem;\n\t // handle meridiem\n\t config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\t\n\t configFromArray(config);\n\t checkOverflow(config);\n\t}\n\t\n\t\n\tfunction meridiemFixWrap (locale, hour, meridiem) {\n\t var isPm;\n\t\n\t if (meridiem == null) {\n\t // nothing to do\n\t return hour;\n\t }\n\t if (locale.meridiemHour != null) {\n\t return locale.meridiemHour(hour, meridiem);\n\t } else if (locale.isPM != null) {\n\t // Fallback\n\t isPm = locale.isPM(meridiem);\n\t if (isPm && hour < 12) {\n\t hour += 12;\n\t }\n\t if (!isPm && hour === 12) {\n\t hour = 0;\n\t }\n\t return hour;\n\t } else {\n\t // this is not supposed to happen\n\t return hour;\n\t }\n\t}\n\t\n\t// date from string and array of format strings\n\tfunction configFromStringAndArray(config) {\n\t var tempConfig,\n\t bestMoment,\n\t\n\t scoreToBeat,\n\t i,\n\t currentScore;\n\t\n\t if (config._f.length === 0) {\n\t getParsingFlags(config).invalidFormat = true;\n\t config._d = new Date(NaN);\n\t return;\n\t }\n\t\n\t for (i = 0; i < config._f.length; i++) {\n\t currentScore = 0;\n\t tempConfig = copyConfig({}, config);\n\t if (config._useUTC != null) {\n\t tempConfig._useUTC = config._useUTC;\n\t }\n\t tempConfig._f = config._f[i];\n\t configFromStringAndFormat(tempConfig);\n\t\n\t if (!isValid(tempConfig)) {\n\t continue;\n\t }\n\t\n\t // if there is any input that was not parsed add a penalty for that format\n\t currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\t\n\t //or tokens\n\t currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\t\n\t getParsingFlags(tempConfig).score = currentScore;\n\t\n\t if (scoreToBeat == null || currentScore < scoreToBeat) {\n\t scoreToBeat = currentScore;\n\t bestMoment = tempConfig;\n\t }\n\t }\n\t\n\t extend(config, bestMoment || tempConfig);\n\t}\n\t\n\tfunction configFromObject(config) {\n\t if (config._d) {\n\t return;\n\t }\n\t\n\t var i = normalizeObjectUnits(config._i);\n\t config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n\t return obj && parseInt(obj, 10);\n\t });\n\t\n\t configFromArray(config);\n\t}\n\t\n\tfunction createFromConfig (config) {\n\t var res = new Moment(checkOverflow(prepareConfig(config)));\n\t if (res._nextDay) {\n\t // Adding is smart enough around DST\n\t res.add(1, 'd');\n\t res._nextDay = undefined;\n\t }\n\t\n\t return res;\n\t}\n\t\n\tfunction prepareConfig (config) {\n\t var input = config._i,\n\t format = config._f;\n\t\n\t config._locale = config._locale || getLocale(config._l);\n\t\n\t if (input === null || (format === undefined && input === '')) {\n\t return createInvalid({nullInput: true});\n\t }\n\t\n\t if (typeof input === 'string') {\n\t config._i = input = config._locale.preparse(input);\n\t }\n\t\n\t if (isMoment(input)) {\n\t return new Moment(checkOverflow(input));\n\t } else if (isDate(input)) {\n\t config._d = input;\n\t } else if (isArray(format)) {\n\t configFromStringAndArray(config);\n\t } else if (format) {\n\t configFromStringAndFormat(config);\n\t } else {\n\t configFromInput(config);\n\t }\n\t\n\t if (!isValid(config)) {\n\t config._d = null;\n\t }\n\t\n\t return config;\n\t}\n\t\n\tfunction configFromInput(config) {\n\t var input = config._i;\n\t if (isUndefined(input)) {\n\t config._d = new Date(hooks.now());\n\t } else if (isDate(input)) {\n\t config._d = new Date(input.valueOf());\n\t } else if (typeof input === 'string') {\n\t configFromString(config);\n\t } else if (isArray(input)) {\n\t config._a = map(input.slice(0), function (obj) {\n\t return parseInt(obj, 10);\n\t });\n\t configFromArray(config);\n\t } else if (isObject(input)) {\n\t configFromObject(config);\n\t } else if (isNumber(input)) {\n\t // from milliseconds\n\t config._d = new Date(input);\n\t } else {\n\t hooks.createFromInputFallback(config);\n\t }\n\t}\n\t\n\tfunction createLocalOrUTC (input, format, locale, strict, isUTC) {\n\t var c = {};\n\t\n\t if (locale === true || locale === false) {\n\t strict = locale;\n\t locale = undefined;\n\t }\n\t\n\t if ((isObject(input) && isObjectEmpty(input)) ||\n\t (isArray(input) && input.length === 0)) {\n\t input = undefined;\n\t }\n\t // object construction must be done this way.\n\t // https://github.com/moment/moment/issues/1423\n\t c._isAMomentObject = true;\n\t c._useUTC = c._isUTC = isUTC;\n\t c._l = locale;\n\t c._i = input;\n\t c._f = format;\n\t c._strict = strict;\n\t\n\t return createFromConfig(c);\n\t}\n\t\n\tfunction createLocal (input, format, locale, strict) {\n\t return createLocalOrUTC(input, format, locale, strict, false);\n\t}\n\t\n\tvar prototypeMin = deprecate(\n\t 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t function () {\n\t var other = createLocal.apply(null, arguments);\n\t if (this.isValid() && other.isValid()) {\n\t return other < this ? this : other;\n\t } else {\n\t return createInvalid();\n\t }\n\t }\n\t);\n\t\n\tvar prototypeMax = deprecate(\n\t 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n\t function () {\n\t var other = createLocal.apply(null, arguments);\n\t if (this.isValid() && other.isValid()) {\n\t return other > this ? this : other;\n\t } else {\n\t return createInvalid();\n\t }\n\t }\n\t);\n\t\n\t// Pick a moment m from moments so that m[fn](other) is true for all\n\t// other. This relies on the function fn to be transitive.\n\t//\n\t// moments should either be an array of moment objects or an array, whose\n\t// first element is an array of moment objects.\n\tfunction pickBy(fn, moments) {\n\t var res, i;\n\t if (moments.length === 1 && isArray(moments[0])) {\n\t moments = moments[0];\n\t }\n\t if (!moments.length) {\n\t return createLocal();\n\t }\n\t res = moments[0];\n\t for (i = 1; i < moments.length; ++i) {\n\t if (!moments[i].isValid() || moments[i][fn](res)) {\n\t res = moments[i];\n\t }\n\t }\n\t return res;\n\t}\n\t\n\t// TODO: Use [].sort instead?\n\tfunction min () {\n\t var args = [].slice.call(arguments, 0);\n\t\n\t return pickBy('isBefore', args);\n\t}\n\t\n\tfunction max () {\n\t var args = [].slice.call(arguments, 0);\n\t\n\t return pickBy('isAfter', args);\n\t}\n\t\n\tvar now = function () {\n\t return Date.now ? Date.now() : +(new Date());\n\t};\n\t\n\tvar ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\t\n\tfunction isDurationValid(m) {\n\t for (var key in m) {\n\t if (!(ordering.indexOf(key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n\t return false;\n\t }\n\t }\n\t\n\t var unitHasDecimal = false;\n\t for (var i = 0; i < ordering.length; ++i) {\n\t if (m[ordering[i]]) {\n\t if (unitHasDecimal) {\n\t return false; // only allow non-integers for smallest unit\n\t }\n\t if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n\t unitHasDecimal = true;\n\t }\n\t }\n\t }\n\t\n\t return true;\n\t}\n\t\n\tfunction isValid$1() {\n\t return this._isValid;\n\t}\n\t\n\tfunction createInvalid$1() {\n\t return createDuration(NaN);\n\t}\n\t\n\tfunction Duration (duration) {\n\t var normalizedInput = normalizeObjectUnits(duration),\n\t years = normalizedInput.year || 0,\n\t quarters = normalizedInput.quarter || 0,\n\t months = normalizedInput.month || 0,\n\t weeks = normalizedInput.week || 0,\n\t days = normalizedInput.day || 0,\n\t hours = normalizedInput.hour || 0,\n\t minutes = normalizedInput.minute || 0,\n\t seconds = normalizedInput.second || 0,\n\t milliseconds = normalizedInput.millisecond || 0;\n\t\n\t this._isValid = isDurationValid(normalizedInput);\n\t\n\t // representation for dateAddRemove\n\t this._milliseconds = +milliseconds +\n\t seconds * 1e3 + // 1000\n\t minutes * 6e4 + // 1000 * 60\n\t hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n\t // Because of dateAddRemove treats 24 hours as different from a\n\t // day when working around DST, we need to store them separately\n\t this._days = +days +\n\t weeks * 7;\n\t // It is impossible translate months into days without knowing\n\t // which months you are are talking about, so we have to store\n\t // it separately.\n\t this._months = +months +\n\t quarters * 3 +\n\t years * 12;\n\t\n\t this._data = {};\n\t\n\t this._locale = getLocale();\n\t\n\t this._bubble();\n\t}\n\t\n\tfunction isDuration (obj) {\n\t return obj instanceof Duration;\n\t}\n\t\n\tfunction absRound (number) {\n\t if (number < 0) {\n\t return Math.round(-1 * number) * -1;\n\t } else {\n\t return Math.round(number);\n\t }\n\t}\n\t\n\t// FORMATTING\n\t\n\tfunction offset (token, separator) {\n\t addFormatToken(token, 0, 0, function () {\n\t var offset = this.utcOffset();\n\t var sign = '+';\n\t if (offset < 0) {\n\t offset = -offset;\n\t sign = '-';\n\t }\n\t return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n\t });\n\t}\n\t\n\toffset('Z', ':');\n\toffset('ZZ', '');\n\t\n\t// PARSING\n\t\n\taddRegexToken('Z', matchShortOffset);\n\taddRegexToken('ZZ', matchShortOffset);\n\taddParseToken(['Z', 'ZZ'], function (input, array, config) {\n\t config._useUTC = true;\n\t config._tzm = offsetFromString(matchShortOffset, input);\n\t});\n\t\n\t// HELPERS\n\t\n\t// timezone chunker\n\t// '+10:00' > ['10', '00']\n\t// '-1530' > ['-15', '30']\n\tvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\t\n\tfunction offsetFromString(matcher, string) {\n\t var matches = (string || '').match(matcher);\n\t\n\t if (matches === null) {\n\t return null;\n\t }\n\t\n\t var chunk = matches[matches.length - 1] || [];\n\t var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n\t var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\t\n\t return minutes === 0 ?\n\t 0 :\n\t parts[0] === '+' ? minutes : -minutes;\n\t}\n\t\n\t// Return a moment from input, that is local/utc/zone equivalent to model.\n\tfunction cloneWithOffset(input, model) {\n\t var res, diff;\n\t if (model._isUTC) {\n\t res = model.clone();\n\t diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n\t // Use low-level api, because this fn is low-level api.\n\t res._d.setTime(res._d.valueOf() + diff);\n\t hooks.updateOffset(res, false);\n\t return res;\n\t } else {\n\t return createLocal(input).local();\n\t }\n\t}\n\t\n\tfunction getDateOffset (m) {\n\t // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n\t // https://github.com/moment/moment/pull/1871\n\t return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n\t}\n\t\n\t// HOOKS\n\t\n\t// This function will be called whenever a moment is mutated.\n\t// It is intended to keep the offset in sync with the timezone.\n\thooks.updateOffset = function () {};\n\t\n\t// MOMENTS\n\t\n\t// keepLocalTime = true means only change the timezone, without\n\t// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n\t// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n\t// +0200, so we adjust the time as needed, to be valid.\n\t//\n\t// Keeping the time actually adds/subtracts (one hour)\n\t// from the actual represented time. That is why we call updateOffset\n\t// a second time. In case it wants us to change the offset again\n\t// _changeInProgress == true case, then we have to adjust, because\n\t// there is no such time in the given timezone.\n\tfunction getSetOffset (input, keepLocalTime, keepMinutes) {\n\t var offset = this._offset || 0,\n\t localAdjust;\n\t if (!this.isValid()) {\n\t return input != null ? this : NaN;\n\t }\n\t if (input != null) {\n\t if (typeof input === 'string') {\n\t input = offsetFromString(matchShortOffset, input);\n\t if (input === null) {\n\t return this;\n\t }\n\t } else if (Math.abs(input) < 16 && !keepMinutes) {\n\t input = input * 60;\n\t }\n\t if (!this._isUTC && keepLocalTime) {\n\t localAdjust = getDateOffset(this);\n\t }\n\t this._offset = input;\n\t this._isUTC = true;\n\t if (localAdjust != null) {\n\t this.add(localAdjust, 'm');\n\t }\n\t if (offset !== input) {\n\t if (!keepLocalTime || this._changeInProgress) {\n\t addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n\t } else if (!this._changeInProgress) {\n\t this._changeInProgress = true;\n\t hooks.updateOffset(this, true);\n\t this._changeInProgress = null;\n\t }\n\t }\n\t return this;\n\t } else {\n\t return this._isUTC ? offset : getDateOffset(this);\n\t }\n\t}\n\t\n\tfunction getSetZone (input, keepLocalTime) {\n\t if (input != null) {\n\t if (typeof input !== 'string') {\n\t input = -input;\n\t }\n\t\n\t this.utcOffset(input, keepLocalTime);\n\t\n\t return this;\n\t } else {\n\t return -this.utcOffset();\n\t }\n\t}\n\t\n\tfunction setOffsetToUTC (keepLocalTime) {\n\t return this.utcOffset(0, keepLocalTime);\n\t}\n\t\n\tfunction setOffsetToLocal (keepLocalTime) {\n\t if (this._isUTC) {\n\t this.utcOffset(0, keepLocalTime);\n\t this._isUTC = false;\n\t\n\t if (keepLocalTime) {\n\t this.subtract(getDateOffset(this), 'm');\n\t }\n\t }\n\t return this;\n\t}\n\t\n\tfunction setOffsetToParsedOffset () {\n\t if (this._tzm != null) {\n\t this.utcOffset(this._tzm, false, true);\n\t } else if (typeof this._i === 'string') {\n\t var tZone = offsetFromString(matchOffset, this._i);\n\t if (tZone != null) {\n\t this.utcOffset(tZone);\n\t }\n\t else {\n\t this.utcOffset(0, true);\n\t }\n\t }\n\t return this;\n\t}\n\t\n\tfunction hasAlignedHourOffset (input) {\n\t if (!this.isValid()) {\n\t return false;\n\t }\n\t input = input ? createLocal(input).utcOffset() : 0;\n\t\n\t return (this.utcOffset() - input) % 60 === 0;\n\t}\n\t\n\tfunction isDaylightSavingTime () {\n\t return (\n\t this.utcOffset() > this.clone().month(0).utcOffset() ||\n\t this.utcOffset() > this.clone().month(5).utcOffset()\n\t );\n\t}\n\t\n\tfunction isDaylightSavingTimeShifted () {\n\t if (!isUndefined(this._isDSTShifted)) {\n\t return this._isDSTShifted;\n\t }\n\t\n\t var c = {};\n\t\n\t copyConfig(c, this);\n\t c = prepareConfig(c);\n\t\n\t if (c._a) {\n\t var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n\t this._isDSTShifted = this.isValid() &&\n\t compareArrays(c._a, other.toArray()) > 0;\n\t } else {\n\t this._isDSTShifted = false;\n\t }\n\t\n\t return this._isDSTShifted;\n\t}\n\t\n\tfunction isLocal () {\n\t return this.isValid() ? !this._isUTC : false;\n\t}\n\t\n\tfunction isUtcOffset () {\n\t return this.isValid() ? this._isUTC : false;\n\t}\n\t\n\tfunction isUtc () {\n\t return this.isValid() ? this._isUTC && this._offset === 0 : false;\n\t}\n\t\n\t// ASP.NET json date format regex\n\tvar aspNetRegex = /^(\\-)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\t\n\t// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n\t// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n\t// and further modified to allow for strings containing both week and day\n\tvar isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;\n\t\n\tfunction createDuration (input, key) {\n\t var duration = input,\n\t // matching against regexp is expensive, do it on demand\n\t match = null,\n\t sign,\n\t ret,\n\t diffRes;\n\t\n\t if (isDuration(input)) {\n\t duration = {\n\t ms : input._milliseconds,\n\t d : input._days,\n\t M : input._months\n\t };\n\t } else if (isNumber(input)) {\n\t duration = {};\n\t if (key) {\n\t duration[key] = input;\n\t } else {\n\t duration.milliseconds = input;\n\t }\n\t } else if (!!(match = aspNetRegex.exec(input))) {\n\t sign = (match[1] === '-') ? -1 : 1;\n\t duration = {\n\t y : 0,\n\t d : toInt(match[DATE]) * sign,\n\t h : toInt(match[HOUR]) * sign,\n\t m : toInt(match[MINUTE]) * sign,\n\t s : toInt(match[SECOND]) * sign,\n\t ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n\t };\n\t } else if (!!(match = isoRegex.exec(input))) {\n\t sign = (match[1] === '-') ? -1 : 1;\n\t duration = {\n\t y : parseIso(match[2], sign),\n\t M : parseIso(match[3], sign),\n\t w : parseIso(match[4], sign),\n\t d : parseIso(match[5], sign),\n\t h : parseIso(match[6], sign),\n\t m : parseIso(match[7], sign),\n\t s : parseIso(match[8], sign)\n\t };\n\t } else if (duration == null) {// checks for null or undefined\n\t duration = {};\n\t } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n\t diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\t\n\t duration = {};\n\t duration.ms = diffRes.milliseconds;\n\t duration.M = diffRes.months;\n\t }\n\t\n\t ret = new Duration(duration);\n\t\n\t if (isDuration(input) && hasOwnProp(input, '_locale')) {\n\t ret._locale = input._locale;\n\t }\n\t\n\t return ret;\n\t}\n\t\n\tcreateDuration.fn = Duration.prototype;\n\tcreateDuration.invalid = createInvalid$1;\n\t\n\tfunction parseIso (inp, sign) {\n\t // We'd normally use ~~inp for this, but unfortunately it also\n\t // converts floats to ints.\n\t // inp may be undefined, so careful calling replace on it.\n\t var res = inp && parseFloat(inp.replace(',', '.'));\n\t // apply sign while we're at it\n\t return (isNaN(res) ? 0 : res) * sign;\n\t}\n\t\n\tfunction positiveMomentsDifference(base, other) {\n\t var res = {milliseconds: 0, months: 0};\n\t\n\t res.months = other.month() - base.month() +\n\t (other.year() - base.year()) * 12;\n\t if (base.clone().add(res.months, 'M').isAfter(other)) {\n\t --res.months;\n\t }\n\t\n\t res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\t\n\t return res;\n\t}\n\t\n\tfunction momentsDifference(base, other) {\n\t var res;\n\t if (!(base.isValid() && other.isValid())) {\n\t return {milliseconds: 0, months: 0};\n\t }\n\t\n\t other = cloneWithOffset(other, base);\n\t if (base.isBefore(other)) {\n\t res = positiveMomentsDifference(base, other);\n\t } else {\n\t res = positiveMomentsDifference(other, base);\n\t res.milliseconds = -res.milliseconds;\n\t res.months = -res.months;\n\t }\n\t\n\t return res;\n\t}\n\t\n\t// TODO: remove 'name' arg after deprecation is removed\n\tfunction createAdder(direction, name) {\n\t return function (val, period) {\n\t var dur, tmp;\n\t //invert the arguments, but complain about it\n\t if (period !== null && !isNaN(+period)) {\n\t deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n\t 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n\t tmp = val; val = period; period = tmp;\n\t }\n\t\n\t val = typeof val === 'string' ? +val : val;\n\t dur = createDuration(val, period);\n\t addSubtract(this, dur, direction);\n\t return this;\n\t };\n\t}\n\t\n\tfunction addSubtract (mom, duration, isAdding, updateOffset) {\n\t var milliseconds = duration._milliseconds,\n\t days = absRound(duration._days),\n\t months = absRound(duration._months);\n\t\n\t if (!mom.isValid()) {\n\t // No op\n\t return;\n\t }\n\t\n\t updateOffset = updateOffset == null ? true : updateOffset;\n\t\n\t if (milliseconds) {\n\t mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n\t }\n\t if (days) {\n\t set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n\t }\n\t if (months) {\n\t setMonth(mom, get(mom, 'Month') + months * isAdding);\n\t }\n\t if (updateOffset) {\n\t hooks.updateOffset(mom, days || months);\n\t }\n\t}\n\t\n\tvar add = createAdder(1, 'add');\n\tvar subtract = createAdder(-1, 'subtract');\n\t\n\tfunction getCalendarFormat(myMoment, now) {\n\t var diff = myMoment.diff(now, 'days', true);\n\t return diff < -6 ? 'sameElse' :\n\t diff < -1 ? 'lastWeek' :\n\t diff < 0 ? 'lastDay' :\n\t diff < 1 ? 'sameDay' :\n\t diff < 2 ? 'nextDay' :\n\t diff < 7 ? 'nextWeek' : 'sameElse';\n\t}\n\t\n\tfunction calendar$1 (time, formats) {\n\t // We want to compare the start of today, vs this.\n\t // Getting start-of-today depends on whether we're local/utc/offset or not.\n\t var now = time || createLocal(),\n\t sod = cloneWithOffset(now, this).startOf('day'),\n\t format = hooks.calendarFormat(this, sod) || 'sameElse';\n\t\n\t var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\t\n\t return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n\t}\n\t\n\tfunction clone () {\n\t return new Moment(this);\n\t}\n\t\n\tfunction isAfter (input, units) {\n\t var localInput = isMoment(input) ? input : createLocal(input);\n\t if (!(this.isValid() && localInput.isValid())) {\n\t return false;\n\t }\n\t units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n\t if (units === 'millisecond') {\n\t return this.valueOf() > localInput.valueOf();\n\t } else {\n\t return localInput.valueOf() < this.clone().startOf(units).valueOf();\n\t }\n\t}\n\t\n\tfunction isBefore (input, units) {\n\t var localInput = isMoment(input) ? input : createLocal(input);\n\t if (!(this.isValid() && localInput.isValid())) {\n\t return false;\n\t }\n\t units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n\t if (units === 'millisecond') {\n\t return this.valueOf() < localInput.valueOf();\n\t } else {\n\t return this.clone().endOf(units).valueOf() < localInput.valueOf();\n\t }\n\t}\n\t\n\tfunction isBetween (from, to, units, inclusivity) {\n\t inclusivity = inclusivity || '()';\n\t return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n\t (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n\t}\n\t\n\tfunction isSame (input, units) {\n\t var localInput = isMoment(input) ? input : createLocal(input),\n\t inputMs;\n\t if (!(this.isValid() && localInput.isValid())) {\n\t return false;\n\t }\n\t units = normalizeUnits(units || 'millisecond');\n\t if (units === 'millisecond') {\n\t return this.valueOf() === localInput.valueOf();\n\t } else {\n\t inputMs = localInput.valueOf();\n\t return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n\t }\n\t}\n\t\n\tfunction isSameOrAfter (input, units) {\n\t return this.isSame(input, units) || this.isAfter(input,units);\n\t}\n\t\n\tfunction isSameOrBefore (input, units) {\n\t return this.isSame(input, units) || this.isBefore(input,units);\n\t}\n\t\n\tfunction diff (input, units, asFloat) {\n\t var that,\n\t zoneDelta,\n\t delta, output;\n\t\n\t if (!this.isValid()) {\n\t return NaN;\n\t }\n\t\n\t that = cloneWithOffset(input, this);\n\t\n\t if (!that.isValid()) {\n\t return NaN;\n\t }\n\t\n\t zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\t\n\t units = normalizeUnits(units);\n\t\n\t if (units === 'year' || units === 'month' || units === 'quarter') {\n\t output = monthDiff(this, that);\n\t if (units === 'quarter') {\n\t output = output / 3;\n\t } else if (units === 'year') {\n\t output = output / 12;\n\t }\n\t } else {\n\t delta = this - that;\n\t output = units === 'second' ? delta / 1e3 : // 1000\n\t units === 'minute' ? delta / 6e4 : // 1000 * 60\n\t units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n\t units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n\t units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n\t delta;\n\t }\n\t return asFloat ? output : absFloor(output);\n\t}\n\t\n\tfunction monthDiff (a, b) {\n\t // difference in months\n\t var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n\t // b is in (anchor - 1 month, anchor + 1 month)\n\t anchor = a.clone().add(wholeMonthDiff, 'months'),\n\t anchor2, adjust;\n\t\n\t if (b - anchor < 0) {\n\t anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n\t // linear across the month\n\t adjust = (b - anchor) / (anchor - anchor2);\n\t } else {\n\t anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n\t // linear across the month\n\t adjust = (b - anchor) / (anchor2 - anchor);\n\t }\n\t\n\t //check for negative zero, return zero if negative zero\n\t return -(wholeMonthDiff + adjust) || 0;\n\t}\n\t\n\thooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n\thooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\t\n\tfunction toString () {\n\t return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n\t}\n\t\n\tfunction toISOString() {\n\t if (!this.isValid()) {\n\t return null;\n\t }\n\t var m = this.clone().utc();\n\t if (m.year() < 0 || m.year() > 9999) {\n\t return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n\t }\n\t if (isFunction(Date.prototype.toISOString)) {\n\t // native implementation is ~50x faster, use it when we can\n\t return this.toDate().toISOString();\n\t }\n\t return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n\t}\n\t\n\t/**\n\t * Return a human readable representation of a moment that can\n\t * also be evaluated to get a new moment which is the same\n\t *\n\t * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n\t */\n\tfunction inspect () {\n\t if (!this.isValid()) {\n\t return 'moment.invalid(/* ' + this._i + ' */)';\n\t }\n\t var func = 'moment';\n\t var zone = '';\n\t if (!this.isLocal()) {\n\t func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n\t zone = 'Z';\n\t }\n\t var prefix = '[' + func + '(\"]';\n\t var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n\t var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n\t var suffix = zone + '[\")]';\n\t\n\t return this.format(prefix + year + datetime + suffix);\n\t}\n\t\n\tfunction format (inputString) {\n\t if (!inputString) {\n\t inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n\t }\n\t var output = formatMoment(this, inputString);\n\t return this.localeData().postformat(output);\n\t}\n\t\n\tfunction from (time, withoutSuffix) {\n\t if (this.isValid() &&\n\t ((isMoment(time) && time.isValid()) ||\n\t createLocal(time).isValid())) {\n\t return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n\t } else {\n\t return this.localeData().invalidDate();\n\t }\n\t}\n\t\n\tfunction fromNow (withoutSuffix) {\n\t return this.from(createLocal(), withoutSuffix);\n\t}\n\t\n\tfunction to (time, withoutSuffix) {\n\t if (this.isValid() &&\n\t ((isMoment(time) && time.isValid()) ||\n\t createLocal(time).isValid())) {\n\t return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n\t } else {\n\t return this.localeData().invalidDate();\n\t }\n\t}\n\t\n\tfunction toNow (withoutSuffix) {\n\t return this.to(createLocal(), withoutSuffix);\n\t}\n\t\n\t// If passed a locale key, it will set the locale for this\n\t// instance. Otherwise, it will return the locale configuration\n\t// variables for this instance.\n\tfunction locale (key) {\n\t var newLocaleData;\n\t\n\t if (key === undefined) {\n\t return this._locale._abbr;\n\t } else {\n\t newLocaleData = getLocale(key);\n\t if (newLocaleData != null) {\n\t this._locale = newLocaleData;\n\t }\n\t return this;\n\t }\n\t}\n\t\n\tvar lang = deprecate(\n\t 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n\t function (key) {\n\t if (key === undefined) {\n\t return this.localeData();\n\t } else {\n\t return this.locale(key);\n\t }\n\t }\n\t);\n\t\n\tfunction localeData () {\n\t return this._locale;\n\t}\n\t\n\tfunction startOf (units) {\n\t units = normalizeUnits(units);\n\t // the following switch intentionally omits break keywords\n\t // to utilize falling through the cases.\n\t switch (units) {\n\t case 'year':\n\t this.month(0);\n\t /* falls through */\n\t case 'quarter':\n\t case 'month':\n\t this.date(1);\n\t /* falls through */\n\t case 'week':\n\t case 'isoWeek':\n\t case 'day':\n\t case 'date':\n\t this.hours(0);\n\t /* falls through */\n\t case 'hour':\n\t this.minutes(0);\n\t /* falls through */\n\t case 'minute':\n\t this.seconds(0);\n\t /* falls through */\n\t case 'second':\n\t this.milliseconds(0);\n\t }\n\t\n\t // weeks are a special case\n\t if (units === 'week') {\n\t this.weekday(0);\n\t }\n\t if (units === 'isoWeek') {\n\t this.isoWeekday(1);\n\t }\n\t\n\t // quarters are also special\n\t if (units === 'quarter') {\n\t this.month(Math.floor(this.month() / 3) * 3);\n\t }\n\t\n\t return this;\n\t}\n\t\n\tfunction endOf (units) {\n\t units = normalizeUnits(units);\n\t if (units === undefined || units === 'millisecond') {\n\t return this;\n\t }\n\t\n\t // 'date' is an alias for 'day', so it should be considered as such.\n\t if (units === 'date') {\n\t units = 'day';\n\t }\n\t\n\t return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n\t}\n\t\n\tfunction valueOf () {\n\t return this._d.valueOf() - ((this._offset || 0) * 60000);\n\t}\n\t\n\tfunction unix () {\n\t return Math.floor(this.valueOf() / 1000);\n\t}\n\t\n\tfunction toDate () {\n\t return new Date(this.valueOf());\n\t}\n\t\n\tfunction toArray () {\n\t var m = this;\n\t return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n\t}\n\t\n\tfunction toObject () {\n\t var m = this;\n\t return {\n\t years: m.year(),\n\t months: m.month(),\n\t date: m.date(),\n\t hours: m.hours(),\n\t minutes: m.minutes(),\n\t seconds: m.seconds(),\n\t milliseconds: m.milliseconds()\n\t };\n\t}\n\t\n\tfunction toJSON () {\n\t // new Date(NaN).toJSON() === null\n\t return this.isValid() ? this.toISOString() : null;\n\t}\n\t\n\tfunction isValid$2 () {\n\t return isValid(this);\n\t}\n\t\n\tfunction parsingFlags () {\n\t return extend({}, getParsingFlags(this));\n\t}\n\t\n\tfunction invalidAt () {\n\t return getParsingFlags(this).overflow;\n\t}\n\t\n\tfunction creationData() {\n\t return {\n\t input: this._i,\n\t format: this._f,\n\t locale: this._locale,\n\t isUTC: this._isUTC,\n\t strict: this._strict\n\t };\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken(0, ['gg', 2], 0, function () {\n\t return this.weekYear() % 100;\n\t});\n\t\n\taddFormatToken(0, ['GG', 2], 0, function () {\n\t return this.isoWeekYear() % 100;\n\t});\n\t\n\tfunction addWeekYearFormatToken (token, getter) {\n\t addFormatToken(0, [token, token.length], 0, getter);\n\t}\n\t\n\taddWeekYearFormatToken('gggg', 'weekYear');\n\taddWeekYearFormatToken('ggggg', 'weekYear');\n\taddWeekYearFormatToken('GGGG', 'isoWeekYear');\n\taddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('weekYear', 'gg');\n\taddUnitAlias('isoWeekYear', 'GG');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('weekYear', 1);\n\taddUnitPriority('isoWeekYear', 1);\n\t\n\t\n\t// PARSING\n\t\n\taddRegexToken('G', matchSigned);\n\taddRegexToken('g', matchSigned);\n\taddRegexToken('GG', match1to2, match2);\n\taddRegexToken('gg', match1to2, match2);\n\taddRegexToken('GGGG', match1to4, match4);\n\taddRegexToken('gggg', match1to4, match4);\n\taddRegexToken('GGGGG', match1to6, match6);\n\taddRegexToken('ggggg', match1to6, match6);\n\t\n\taddWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n\t week[token.substr(0, 2)] = toInt(input);\n\t});\n\t\n\taddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n\t week[token] = hooks.parseTwoDigitYear(input);\n\t});\n\t\n\t// MOMENTS\n\t\n\tfunction getSetWeekYear (input) {\n\t return getSetWeekYearHelper.call(this,\n\t input,\n\t this.week(),\n\t this.weekday(),\n\t this.localeData()._week.dow,\n\t this.localeData()._week.doy);\n\t}\n\t\n\tfunction getSetISOWeekYear (input) {\n\t return getSetWeekYearHelper.call(this,\n\t input, this.isoWeek(), this.isoWeekday(), 1, 4);\n\t}\n\t\n\tfunction getISOWeeksInYear () {\n\t return weeksInYear(this.year(), 1, 4);\n\t}\n\t\n\tfunction getWeeksInYear () {\n\t var weekInfo = this.localeData()._week;\n\t return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n\t}\n\t\n\tfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n\t var weeksTarget;\n\t if (input == null) {\n\t return weekOfYear(this, dow, doy).year;\n\t } else {\n\t weeksTarget = weeksInYear(input, dow, doy);\n\t if (week > weeksTarget) {\n\t week = weeksTarget;\n\t }\n\t return setWeekAll.call(this, input, week, weekday, dow, doy);\n\t }\n\t}\n\t\n\tfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n\t var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n\t date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\t\n\t this.year(date.getUTCFullYear());\n\t this.month(date.getUTCMonth());\n\t this.date(date.getUTCDate());\n\t return this;\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('Q', 0, 'Qo', 'quarter');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('quarter', 'Q');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('quarter', 7);\n\t\n\t// PARSING\n\t\n\taddRegexToken('Q', match1);\n\taddParseToken('Q', function (input, array) {\n\t array[MONTH] = (toInt(input) - 1) * 3;\n\t});\n\t\n\t// MOMENTS\n\t\n\tfunction getSetQuarter (input) {\n\t return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('D', ['DD', 2], 'Do', 'date');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('date', 'D');\n\t\n\t// PRIOROITY\n\taddUnitPriority('date', 9);\n\t\n\t// PARSING\n\t\n\taddRegexToken('D', match1to2);\n\taddRegexToken('DD', match1to2, match2);\n\taddRegexToken('Do', function (isStrict, locale) {\n\t // TODO: Remove \"ordinalParse\" fallback in next major release.\n\t return isStrict ?\n\t (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n\t locale._dayOfMonthOrdinalParseLenient;\n\t});\n\t\n\taddParseToken(['D', 'DD'], DATE);\n\taddParseToken('Do', function (input, array) {\n\t array[DATE] = toInt(input.match(match1to2)[0], 10);\n\t});\n\t\n\t// MOMENTS\n\t\n\tvar getSetDayOfMonth = makeGetSet('Date', true);\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('dayOfYear', 'DDD');\n\t\n\t// PRIORITY\n\taddUnitPriority('dayOfYear', 4);\n\t\n\t// PARSING\n\t\n\taddRegexToken('DDD', match1to3);\n\taddRegexToken('DDDD', match3);\n\taddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n\t config._dayOfYear = toInt(input);\n\t});\n\t\n\t// HELPERS\n\t\n\t// MOMENTS\n\t\n\tfunction getSetDayOfYear (input) {\n\t var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n\t return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n\t}\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('m', ['mm', 2], 0, 'minute');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('minute', 'm');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('minute', 14);\n\t\n\t// PARSING\n\t\n\taddRegexToken('m', match1to2);\n\taddRegexToken('mm', match1to2, match2);\n\taddParseToken(['m', 'mm'], MINUTE);\n\t\n\t// MOMENTS\n\t\n\tvar getSetMinute = makeGetSet('Minutes', false);\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('s', ['ss', 2], 0, 'second');\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('second', 's');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('second', 15);\n\t\n\t// PARSING\n\t\n\taddRegexToken('s', match1to2);\n\taddRegexToken('ss', match1to2, match2);\n\taddParseToken(['s', 'ss'], SECOND);\n\t\n\t// MOMENTS\n\t\n\tvar getSetSecond = makeGetSet('Seconds', false);\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('S', 0, 0, function () {\n\t return ~~(this.millisecond() / 100);\n\t});\n\t\n\taddFormatToken(0, ['SS', 2], 0, function () {\n\t return ~~(this.millisecond() / 10);\n\t});\n\t\n\taddFormatToken(0, ['SSS', 3], 0, 'millisecond');\n\taddFormatToken(0, ['SSSS', 4], 0, function () {\n\t return this.millisecond() * 10;\n\t});\n\taddFormatToken(0, ['SSSSS', 5], 0, function () {\n\t return this.millisecond() * 100;\n\t});\n\taddFormatToken(0, ['SSSSSS', 6], 0, function () {\n\t return this.millisecond() * 1000;\n\t});\n\taddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n\t return this.millisecond() * 10000;\n\t});\n\taddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n\t return this.millisecond() * 100000;\n\t});\n\taddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n\t return this.millisecond() * 1000000;\n\t});\n\t\n\t\n\t// ALIASES\n\t\n\taddUnitAlias('millisecond', 'ms');\n\t\n\t// PRIORITY\n\t\n\taddUnitPriority('millisecond', 16);\n\t\n\t// PARSING\n\t\n\taddRegexToken('S', match1to3, match1);\n\taddRegexToken('SS', match1to3, match2);\n\taddRegexToken('SSS', match1to3, match3);\n\t\n\tvar token;\n\tfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n\t addRegexToken(token, matchUnsigned);\n\t}\n\t\n\tfunction parseMs(input, array) {\n\t array[MILLISECOND] = toInt(('0.' + input) * 1000);\n\t}\n\t\n\tfor (token = 'S'; token.length <= 9; token += 'S') {\n\t addParseToken(token, parseMs);\n\t}\n\t// MOMENTS\n\t\n\tvar getSetMillisecond = makeGetSet('Milliseconds', false);\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('z', 0, 0, 'zoneAbbr');\n\taddFormatToken('zz', 0, 0, 'zoneName');\n\t\n\t// MOMENTS\n\t\n\tfunction getZoneAbbr () {\n\t return this._isUTC ? 'UTC' : '';\n\t}\n\t\n\tfunction getZoneName () {\n\t return this._isUTC ? 'Coordinated Universal Time' : '';\n\t}\n\t\n\tvar proto = Moment.prototype;\n\t\n\tproto.add = add;\n\tproto.calendar = calendar$1;\n\tproto.clone = clone;\n\tproto.diff = diff;\n\tproto.endOf = endOf;\n\tproto.format = format;\n\tproto.from = from;\n\tproto.fromNow = fromNow;\n\tproto.to = to;\n\tproto.toNow = toNow;\n\tproto.get = stringGet;\n\tproto.invalidAt = invalidAt;\n\tproto.isAfter = isAfter;\n\tproto.isBefore = isBefore;\n\tproto.isBetween = isBetween;\n\tproto.isSame = isSame;\n\tproto.isSameOrAfter = isSameOrAfter;\n\tproto.isSameOrBefore = isSameOrBefore;\n\tproto.isValid = isValid$2;\n\tproto.lang = lang;\n\tproto.locale = locale;\n\tproto.localeData = localeData;\n\tproto.max = prototypeMax;\n\tproto.min = prototypeMin;\n\tproto.parsingFlags = parsingFlags;\n\tproto.set = stringSet;\n\tproto.startOf = startOf;\n\tproto.subtract = subtract;\n\tproto.toArray = toArray;\n\tproto.toObject = toObject;\n\tproto.toDate = toDate;\n\tproto.toISOString = toISOString;\n\tproto.inspect = inspect;\n\tproto.toJSON = toJSON;\n\tproto.toString = toString;\n\tproto.unix = unix;\n\tproto.valueOf = valueOf;\n\tproto.creationData = creationData;\n\t\n\t// Year\n\tproto.year = getSetYear;\n\tproto.isLeapYear = getIsLeapYear;\n\t\n\t// Week Year\n\tproto.weekYear = getSetWeekYear;\n\tproto.isoWeekYear = getSetISOWeekYear;\n\t\n\t// Quarter\n\tproto.quarter = proto.quarters = getSetQuarter;\n\t\n\t// Month\n\tproto.month = getSetMonth;\n\tproto.daysInMonth = getDaysInMonth;\n\t\n\t// Week\n\tproto.week = proto.weeks = getSetWeek;\n\tproto.isoWeek = proto.isoWeeks = getSetISOWeek;\n\tproto.weeksInYear = getWeeksInYear;\n\tproto.isoWeeksInYear = getISOWeeksInYear;\n\t\n\t// Day\n\tproto.date = getSetDayOfMonth;\n\tproto.day = proto.days = getSetDayOfWeek;\n\tproto.weekday = getSetLocaleDayOfWeek;\n\tproto.isoWeekday = getSetISODayOfWeek;\n\tproto.dayOfYear = getSetDayOfYear;\n\t\n\t// Hour\n\tproto.hour = proto.hours = getSetHour;\n\t\n\t// Minute\n\tproto.minute = proto.minutes = getSetMinute;\n\t\n\t// Second\n\tproto.second = proto.seconds = getSetSecond;\n\t\n\t// Millisecond\n\tproto.millisecond = proto.milliseconds = getSetMillisecond;\n\t\n\t// Offset\n\tproto.utcOffset = getSetOffset;\n\tproto.utc = setOffsetToUTC;\n\tproto.local = setOffsetToLocal;\n\tproto.parseZone = setOffsetToParsedOffset;\n\tproto.hasAlignedHourOffset = hasAlignedHourOffset;\n\tproto.isDST = isDaylightSavingTime;\n\tproto.isLocal = isLocal;\n\tproto.isUtcOffset = isUtcOffset;\n\tproto.isUtc = isUtc;\n\tproto.isUTC = isUtc;\n\t\n\t// Timezone\n\tproto.zoneAbbr = getZoneAbbr;\n\tproto.zoneName = getZoneName;\n\t\n\t// Deprecations\n\tproto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n\tproto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n\tproto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n\tproto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n\tproto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\t\n\tfunction createUnix (input) {\n\t return createLocal(input * 1000);\n\t}\n\t\n\tfunction createInZone () {\n\t return createLocal.apply(null, arguments).parseZone();\n\t}\n\t\n\tfunction preParsePostFormat (string) {\n\t return string;\n\t}\n\t\n\tvar proto$1 = Locale.prototype;\n\t\n\tproto$1.calendar = calendar;\n\tproto$1.longDateFormat = longDateFormat;\n\tproto$1.invalidDate = invalidDate;\n\tproto$1.ordinal = ordinal;\n\tproto$1.preparse = preParsePostFormat;\n\tproto$1.postformat = preParsePostFormat;\n\tproto$1.relativeTime = relativeTime;\n\tproto$1.pastFuture = pastFuture;\n\tproto$1.set = set;\n\t\n\t// Month\n\tproto$1.months = localeMonths;\n\tproto$1.monthsShort = localeMonthsShort;\n\tproto$1.monthsParse = localeMonthsParse;\n\tproto$1.monthsRegex = monthsRegex;\n\tproto$1.monthsShortRegex = monthsShortRegex;\n\t\n\t// Week\n\tproto$1.week = localeWeek;\n\tproto$1.firstDayOfYear = localeFirstDayOfYear;\n\tproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\t\n\t// Day of Week\n\tproto$1.weekdays = localeWeekdays;\n\tproto$1.weekdaysMin = localeWeekdaysMin;\n\tproto$1.weekdaysShort = localeWeekdaysShort;\n\tproto$1.weekdaysParse = localeWeekdaysParse;\n\t\n\tproto$1.weekdaysRegex = weekdaysRegex;\n\tproto$1.weekdaysShortRegex = weekdaysShortRegex;\n\tproto$1.weekdaysMinRegex = weekdaysMinRegex;\n\t\n\t// Hours\n\tproto$1.isPM = localeIsPM;\n\tproto$1.meridiem = localeMeridiem;\n\t\n\tfunction get$1 (format, index, field, setter) {\n\t var locale = getLocale();\n\t var utc = createUTC().set(setter, index);\n\t return locale[field](utc, format);\n\t}\n\t\n\tfunction listMonthsImpl (format, index, field) {\n\t if (isNumber(format)) {\n\t index = format;\n\t format = undefined;\n\t }\n\t\n\t format = format || '';\n\t\n\t if (index != null) {\n\t return get$1(format, index, field, 'month');\n\t }\n\t\n\t var i;\n\t var out = [];\n\t for (i = 0; i < 12; i++) {\n\t out[i] = get$1(format, i, field, 'month');\n\t }\n\t return out;\n\t}\n\t\n\t// ()\n\t// (5)\n\t// (fmt, 5)\n\t// (fmt)\n\t// (true)\n\t// (true, 5)\n\t// (true, fmt, 5)\n\t// (true, fmt)\n\tfunction listWeekdaysImpl (localeSorted, format, index, field) {\n\t if (typeof localeSorted === 'boolean') {\n\t if (isNumber(format)) {\n\t index = format;\n\t format = undefined;\n\t }\n\t\n\t format = format || '';\n\t } else {\n\t format = localeSorted;\n\t index = format;\n\t localeSorted = false;\n\t\n\t if (isNumber(format)) {\n\t index = format;\n\t format = undefined;\n\t }\n\t\n\t format = format || '';\n\t }\n\t\n\t var locale = getLocale(),\n\t shift = localeSorted ? locale._week.dow : 0;\n\t\n\t if (index != null) {\n\t return get$1(format, (index + shift) % 7, field, 'day');\n\t }\n\t\n\t var i;\n\t var out = [];\n\t for (i = 0; i < 7; i++) {\n\t out[i] = get$1(format, (i + shift) % 7, field, 'day');\n\t }\n\t return out;\n\t}\n\t\n\tfunction listMonths (format, index) {\n\t return listMonthsImpl(format, index, 'months');\n\t}\n\t\n\tfunction listMonthsShort (format, index) {\n\t return listMonthsImpl(format, index, 'monthsShort');\n\t}\n\t\n\tfunction listWeekdays (localeSorted, format, index) {\n\t return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n\t}\n\t\n\tfunction listWeekdaysShort (localeSorted, format, index) {\n\t return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n\t}\n\t\n\tfunction listWeekdaysMin (localeSorted, format, index) {\n\t return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n\t}\n\t\n\tgetSetGlobalLocale('en', {\n\t dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n\t ordinal : function (number) {\n\t var b = number % 10,\n\t output = (toInt(number % 100 / 10) === 1) ? 'th' :\n\t (b === 1) ? 'st' :\n\t (b === 2) ? 'nd' :\n\t (b === 3) ? 'rd' : 'th';\n\t return number + output;\n\t }\n\t});\n\t\n\t// Side effect imports\n\thooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n\thooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\t\n\tvar mathAbs = Math.abs;\n\t\n\tfunction abs () {\n\t var data = this._data;\n\t\n\t this._milliseconds = mathAbs(this._milliseconds);\n\t this._days = mathAbs(this._days);\n\t this._months = mathAbs(this._months);\n\t\n\t data.milliseconds = mathAbs(data.milliseconds);\n\t data.seconds = mathAbs(data.seconds);\n\t data.minutes = mathAbs(data.minutes);\n\t data.hours = mathAbs(data.hours);\n\t data.months = mathAbs(data.months);\n\t data.years = mathAbs(data.years);\n\t\n\t return this;\n\t}\n\t\n\tfunction addSubtract$1 (duration, input, value, direction) {\n\t var other = createDuration(input, value);\n\t\n\t duration._milliseconds += direction * other._milliseconds;\n\t duration._days += direction * other._days;\n\t duration._months += direction * other._months;\n\t\n\t return duration._bubble();\n\t}\n\t\n\t// supports only 2.0-style add(1, 's') or add(duration)\n\tfunction add$1 (input, value) {\n\t return addSubtract$1(this, input, value, 1);\n\t}\n\t\n\t// supports only 2.0-style subtract(1, 's') or subtract(duration)\n\tfunction subtract$1 (input, value) {\n\t return addSubtract$1(this, input, value, -1);\n\t}\n\t\n\tfunction absCeil (number) {\n\t if (number < 0) {\n\t return Math.floor(number);\n\t } else {\n\t return Math.ceil(number);\n\t }\n\t}\n\t\n\tfunction bubble () {\n\t var milliseconds = this._milliseconds;\n\t var days = this._days;\n\t var months = this._months;\n\t var data = this._data;\n\t var seconds, minutes, hours, years, monthsFromDays;\n\t\n\t // if we have a mix of positive and negative values, bubble down first\n\t // check: https://github.com/moment/moment/issues/2166\n\t if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n\t (milliseconds <= 0 && days <= 0 && months <= 0))) {\n\t milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n\t days = 0;\n\t months = 0;\n\t }\n\t\n\t // The following code bubbles up values, see the tests for\n\t // examples of what that means.\n\t data.milliseconds = milliseconds % 1000;\n\t\n\t seconds = absFloor(milliseconds / 1000);\n\t data.seconds = seconds % 60;\n\t\n\t minutes = absFloor(seconds / 60);\n\t data.minutes = minutes % 60;\n\t\n\t hours = absFloor(minutes / 60);\n\t data.hours = hours % 24;\n\t\n\t days += absFloor(hours / 24);\n\t\n\t // convert days to months\n\t monthsFromDays = absFloor(daysToMonths(days));\n\t months += monthsFromDays;\n\t days -= absCeil(monthsToDays(monthsFromDays));\n\t\n\t // 12 months -> 1 year\n\t years = absFloor(months / 12);\n\t months %= 12;\n\t\n\t data.days = days;\n\t data.months = months;\n\t data.years = years;\n\t\n\t return this;\n\t}\n\t\n\tfunction daysToMonths (days) {\n\t // 400 years have 146097 days (taking into account leap year rules)\n\t // 400 years have 12 months === 4800\n\t return days * 4800 / 146097;\n\t}\n\t\n\tfunction monthsToDays (months) {\n\t // the reverse of daysToMonths\n\t return months * 146097 / 4800;\n\t}\n\t\n\tfunction as (units) {\n\t if (!this.isValid()) {\n\t return NaN;\n\t }\n\t var days;\n\t var months;\n\t var milliseconds = this._milliseconds;\n\t\n\t units = normalizeUnits(units);\n\t\n\t if (units === 'month' || units === 'year') {\n\t days = this._days + milliseconds / 864e5;\n\t months = this._months + daysToMonths(days);\n\t return units === 'month' ? months : months / 12;\n\t } else {\n\t // handle milliseconds separately because of floating point math errors (issue #1867)\n\t days = this._days + Math.round(monthsToDays(this._months));\n\t switch (units) {\n\t case 'week' : return days / 7 + milliseconds / 6048e5;\n\t case 'day' : return days + milliseconds / 864e5;\n\t case 'hour' : return days * 24 + milliseconds / 36e5;\n\t case 'minute' : return days * 1440 + milliseconds / 6e4;\n\t case 'second' : return days * 86400 + milliseconds / 1000;\n\t // Math.floor prevents floating point math errors here\n\t case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n\t default: throw new Error('Unknown unit ' + units);\n\t }\n\t }\n\t}\n\t\n\t// TODO: Use this.as('ms')?\n\tfunction valueOf$1 () {\n\t if (!this.isValid()) {\n\t return NaN;\n\t }\n\t return (\n\t this._milliseconds +\n\t this._days * 864e5 +\n\t (this._months % 12) * 2592e6 +\n\t toInt(this._months / 12) * 31536e6\n\t );\n\t}\n\t\n\tfunction makeAs (alias) {\n\t return function () {\n\t return this.as(alias);\n\t };\n\t}\n\t\n\tvar asMilliseconds = makeAs('ms');\n\tvar asSeconds = makeAs('s');\n\tvar asMinutes = makeAs('m');\n\tvar asHours = makeAs('h');\n\tvar asDays = makeAs('d');\n\tvar asWeeks = makeAs('w');\n\tvar asMonths = makeAs('M');\n\tvar asYears = makeAs('y');\n\t\n\tfunction get$2 (units) {\n\t units = normalizeUnits(units);\n\t return this.isValid() ? this[units + 's']() : NaN;\n\t}\n\t\n\tfunction makeGetter(name) {\n\t return function () {\n\t return this.isValid() ? this._data[name] : NaN;\n\t };\n\t}\n\t\n\tvar milliseconds = makeGetter('milliseconds');\n\tvar seconds = makeGetter('seconds');\n\tvar minutes = makeGetter('minutes');\n\tvar hours = makeGetter('hours');\n\tvar days = makeGetter('days');\n\tvar months = makeGetter('months');\n\tvar years = makeGetter('years');\n\t\n\tfunction weeks () {\n\t return absFloor(this.days() / 7);\n\t}\n\t\n\tvar round = Math.round;\n\tvar thresholds = {\n\t ss: 44, // a few seconds to seconds\n\t s : 45, // seconds to minute\n\t m : 45, // minutes to hour\n\t h : 22, // hours to day\n\t d : 26, // days to month\n\t M : 11 // months to year\n\t};\n\t\n\t// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n\tfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n\t return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n\t}\n\t\n\tfunction relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n\t var duration = createDuration(posNegDuration).abs();\n\t var seconds = round(duration.as('s'));\n\t var minutes = round(duration.as('m'));\n\t var hours = round(duration.as('h'));\n\t var days = round(duration.as('d'));\n\t var months = round(duration.as('M'));\n\t var years = round(duration.as('y'));\n\t\n\t var a = seconds <= thresholds.ss && ['s', seconds] ||\n\t seconds < thresholds.s && ['ss', seconds] ||\n\t minutes <= 1 && ['m'] ||\n\t minutes < thresholds.m && ['mm', minutes] ||\n\t hours <= 1 && ['h'] ||\n\t hours < thresholds.h && ['hh', hours] ||\n\t days <= 1 && ['d'] ||\n\t days < thresholds.d && ['dd', days] ||\n\t months <= 1 && ['M'] ||\n\t months < thresholds.M && ['MM', months] ||\n\t years <= 1 && ['y'] || ['yy', years];\n\t\n\t a[2] = withoutSuffix;\n\t a[3] = +posNegDuration > 0;\n\t a[4] = locale;\n\t return substituteTimeAgo.apply(null, a);\n\t}\n\t\n\t// This function allows you to set the rounding function for relative time strings\n\tfunction getSetRelativeTimeRounding (roundingFunction) {\n\t if (roundingFunction === undefined) {\n\t return round;\n\t }\n\t if (typeof(roundingFunction) === 'function') {\n\t round = roundingFunction;\n\t return true;\n\t }\n\t return false;\n\t}\n\t\n\t// This function allows you to set a threshold for relative time strings\n\tfunction getSetRelativeTimeThreshold (threshold, limit) {\n\t if (thresholds[threshold] === undefined) {\n\t return false;\n\t }\n\t if (limit === undefined) {\n\t return thresholds[threshold];\n\t }\n\t thresholds[threshold] = limit;\n\t if (threshold === 's') {\n\t thresholds.ss = limit - 1;\n\t }\n\t return true;\n\t}\n\t\n\tfunction humanize (withSuffix) {\n\t if (!this.isValid()) {\n\t return this.localeData().invalidDate();\n\t }\n\t\n\t var locale = this.localeData();\n\t var output = relativeTime$1(this, !withSuffix, locale);\n\t\n\t if (withSuffix) {\n\t output = locale.pastFuture(+this, output);\n\t }\n\t\n\t return locale.postformat(output);\n\t}\n\t\n\tvar abs$1 = Math.abs;\n\t\n\tfunction toISOString$1() {\n\t // for ISO strings we do not use the normal bubbling rules:\n\t // * milliseconds bubble up until they become hours\n\t // * days do not bubble at all\n\t // * months bubble up until they become years\n\t // This is because there is no context-free conversion between hours and days\n\t // (think of clock changes)\n\t // and also not between days and months (28-31 days per month)\n\t if (!this.isValid()) {\n\t return this.localeData().invalidDate();\n\t }\n\t\n\t var seconds = abs$1(this._milliseconds) / 1000;\n\t var days = abs$1(this._days);\n\t var months = abs$1(this._months);\n\t var minutes, hours, years;\n\t\n\t // 3600 seconds -> 60 minutes -> 1 hour\n\t minutes = absFloor(seconds / 60);\n\t hours = absFloor(minutes / 60);\n\t seconds %= 60;\n\t minutes %= 60;\n\t\n\t // 12 months -> 1 year\n\t years = absFloor(months / 12);\n\t months %= 12;\n\t\n\t\n\t // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n\t var Y = years;\n\t var M = months;\n\t var D = days;\n\t var h = hours;\n\t var m = minutes;\n\t var s = seconds;\n\t var total = this.asSeconds();\n\t\n\t if (!total) {\n\t // this is the same as C#'s (Noda) and python (isodate)...\n\t // but not other JS (goog.date)\n\t return 'P0D';\n\t }\n\t\n\t return (total < 0 ? '-' : '') +\n\t 'P' +\n\t (Y ? Y + 'Y' : '') +\n\t (M ? M + 'M' : '') +\n\t (D ? D + 'D' : '') +\n\t ((h || m || s) ? 'T' : '') +\n\t (h ? h + 'H' : '') +\n\t (m ? m + 'M' : '') +\n\t (s ? s + 'S' : '');\n\t}\n\t\n\tvar proto$2 = Duration.prototype;\n\t\n\tproto$2.isValid = isValid$1;\n\tproto$2.abs = abs;\n\tproto$2.add = add$1;\n\tproto$2.subtract = subtract$1;\n\tproto$2.as = as;\n\tproto$2.asMilliseconds = asMilliseconds;\n\tproto$2.asSeconds = asSeconds;\n\tproto$2.asMinutes = asMinutes;\n\tproto$2.asHours = asHours;\n\tproto$2.asDays = asDays;\n\tproto$2.asWeeks = asWeeks;\n\tproto$2.asMonths = asMonths;\n\tproto$2.asYears = asYears;\n\tproto$2.valueOf = valueOf$1;\n\tproto$2._bubble = bubble;\n\tproto$2.get = get$2;\n\tproto$2.milliseconds = milliseconds;\n\tproto$2.seconds = seconds;\n\tproto$2.minutes = minutes;\n\tproto$2.hours = hours;\n\tproto$2.days = days;\n\tproto$2.weeks = weeks;\n\tproto$2.months = months;\n\tproto$2.years = years;\n\tproto$2.humanize = humanize;\n\tproto$2.toISOString = toISOString$1;\n\tproto$2.toString = toISOString$1;\n\tproto$2.toJSON = toISOString$1;\n\tproto$2.locale = locale;\n\tproto$2.localeData = localeData;\n\t\n\t// Deprecations\n\tproto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n\tproto$2.lang = lang;\n\t\n\t// Side effect imports\n\t\n\t// FORMATTING\n\t\n\taddFormatToken('X', 0, 0, 'unix');\n\taddFormatToken('x', 0, 0, 'valueOf');\n\t\n\t// PARSING\n\t\n\taddRegexToken('x', matchSigned);\n\taddRegexToken('X', matchTimestamp);\n\taddParseToken('X', function (input, array, config) {\n\t config._d = new Date(parseFloat(input, 10) * 1000);\n\t});\n\taddParseToken('x', function (input, array, config) {\n\t config._d = new Date(toInt(input));\n\t});\n\t\n\t// Side effect imports\n\t\n\t\n\thooks.version = '2.18.1';\n\t\n\tsetHookCallback(createLocal);\n\t\n\thooks.fn = proto;\n\thooks.min = min;\n\thooks.max = max;\n\thooks.now = now;\n\thooks.utc = createUTC;\n\thooks.unix = createUnix;\n\thooks.months = listMonths;\n\thooks.isDate = isDate;\n\thooks.locale = getSetGlobalLocale;\n\thooks.invalid = createInvalid;\n\thooks.duration = createDuration;\n\thooks.isMoment = isMoment;\n\thooks.weekdays = listWeekdays;\n\thooks.parseZone = createInZone;\n\thooks.localeData = getLocale;\n\thooks.isDuration = isDuration;\n\thooks.monthsShort = listMonthsShort;\n\thooks.weekdaysMin = listWeekdaysMin;\n\thooks.defineLocale = defineLocale;\n\thooks.updateLocale = updateLocale;\n\thooks.locales = listLocales;\n\thooks.weekdaysShort = listWeekdaysShort;\n\thooks.normalizeUnits = normalizeUnits;\n\thooks.relativeTimeRounding = getSetRelativeTimeRounding;\n\thooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n\thooks.calendarFormat = getCalendarFormat;\n\thooks.prototype = proto;\n\t\n\treturn hooks;\n\t\n\t})));\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(110)(module)))\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\texports.default = function (instance, Constructor) {\n\t if (!(instance instanceof Constructor)) {\n\t throw new TypeError(\"Cannot call a class as a function\");\n\t }\n\t};\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _setPrototypeOf = __webpack_require__(553);\n\t\n\tvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\t\n\tvar _create = __webpack_require__(552);\n\t\n\tvar _create2 = _interopRequireDefault(_create);\n\t\n\tvar _typeof2 = __webpack_require__(113);\n\t\n\tvar _typeof3 = _interopRequireDefault(_typeof2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function (subClass, superClass) {\n\t if (typeof superClass !== \"function\" && superClass !== null) {\n\t throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n\t }\n\t\n\t subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n\t constructor: {\n\t value: subClass,\n\t enumerable: false,\n\t writable: true,\n\t configurable: true\n\t }\n\t });\n\t if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n\t};\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _typeof2 = __webpack_require__(113);\n\t\n\tvar _typeof3 = _interopRequireDefault(_typeof2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function (self, call) {\n\t if (!self) {\n\t throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n\t }\n\t\n\t return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n\t};\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _assign = __webpack_require__(175);\n\t\n\tvar _assign2 = _interopRequireDefault(_assign);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = _assign2.default || function (target) {\n\t for (var i = 1; i < arguments.length; i++) {\n\t var source = arguments[i];\n\t\n\t for (var key in source) {\n\t if (Object.prototype.hasOwnProperty.call(source, key)) {\n\t target[key] = source[key];\n\t }\n\t }\n\t }\n\t\n\t return target;\n\t};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\texports.default = function (obj, keys) {\n\t var target = {};\n\t\n\t for (var i in obj) {\n\t if (keys.indexOf(i) >= 0) continue;\n\t if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n\t target[i] = obj[i];\n\t }\n\t\n\t return target;\n\t};\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\t\n\tif (false) {\n\t var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n\t Symbol.for &&\n\t Symbol.for('react.element')) ||\n\t 0xeac7;\n\t\n\t var isValidElement = function(object) {\n\t return typeof object === 'object' &&\n\t object !== null &&\n\t object.$$typeof === REACT_ELEMENT_TYPE;\n\t };\n\t\n\t // By explicitly using `prop-types` you are opting into new development behavior.\n\t // http://fb.me/prop-types-in-prod\n\t var throwOnDirectAccess = true;\n\t module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n\t} else {\n\t // By explicitly using `prop-types` you are opting into new production behavior.\n\t // http://fb.me/prop-types-in-prod\n\t module.exports = __webpack_require__(795)();\n\t}\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n\t Copyright (c) 2016 Jed Watson.\n\t Licensed under the MIT License (MIT), see\n\t http://jedwatson.github.io/classnames\n\t*/\n\t/* global define */\n\t\n\t(function () {\n\t\t'use strict';\n\t\n\t\tvar hasOwn = {}.hasOwnProperty;\n\t\n\t\tfunction classNames () {\n\t\t\tvar classes = [];\n\t\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar arg = arguments[i];\n\t\t\t\tif (!arg) continue;\n\t\n\t\t\t\tvar argType = typeof arg;\n\t\n\t\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\t\tclasses.push(arg);\n\t\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tfor (var key in arg) {\n\t\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\treturn classes.join(' ');\n\t\t}\n\t\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\tmodule.exports = classNames;\n\t\t} else if (true) {\n\t\t\t// register as 'classnames', consistent with npm package name\n\t\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () {\n\t\t\t\treturn classNames;\n\t\t\t}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\t} else {\n\t\t\twindow.classNames = classNames;\n\t\t}\n\t}());\n\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\texports._curry = exports.bsSizes = exports.bsStyles = exports.bsClass = undefined;\n\t\n\tvar _entries = __webpack_require__(176);\n\t\n\tvar _entries2 = _interopRequireDefault(_entries);\n\t\n\tvar _extends2 = __webpack_require__(7);\n\t\n\tvar _extends3 = _interopRequireDefault(_extends2);\n\t\n\texports.prefix = prefix;\n\texports.getClassSet = getClassSet;\n\texports.splitBsProps = splitBsProps;\n\texports.splitBsPropsAndOmit = splitBsPropsAndOmit;\n\texports.addStyle = addStyle;\n\t\n\tvar _invariant = __webpack_require__(29);\n\t\n\tvar _invariant2 = _interopRequireDefault(_invariant);\n\t\n\tvar _propTypes = __webpack_require__(9);\n\t\n\tvar _propTypes2 = _interopRequireDefault(_propTypes);\n\t\n\tvar _StyleConfig = __webpack_require__(22);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction curry(fn) {\n\t return function () {\n\t for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t args[_key] = arguments[_key];\n\t }\n\t\n\t var last = args[args.length - 1];\n\t if (typeof last === 'function') {\n\t return fn.apply(undefined, args);\n\t }\n\t return function (Component) {\n\t return fn.apply(undefined, args.concat([Component]));\n\t };\n\t };\n\t} // TODO: The publicly exposed parts of this should be in lib/BootstrapUtils.\n\t\n\tfunction prefix(props, variant) {\n\t !(props.bsClass != null) ? false ? (0, _invariant2['default'])(false, 'A `bsClass` prop is required for this component') : (0, _invariant2['default'])(false) : void 0;\n\t return props.bsClass + (variant ? '-' + variant : '');\n\t}\n\t\n\tvar bsClass = exports.bsClass = curry(function (defaultClass, Component) {\n\t var propTypes = Component.propTypes || (Component.propTypes = {});\n\t var defaultProps = Component.defaultProps || (Component.defaultProps = {});\n\t\n\t propTypes.bsClass = _propTypes2['default'].string;\n\t defaultProps.bsClass = defaultClass;\n\t\n\t return Component;\n\t});\n\t\n\tvar bsStyles = exports.bsStyles = curry(function (styles, defaultStyle, Component) {\n\t if (typeof defaultStyle !== 'string') {\n\t Component = defaultStyle;\n\t defaultStyle = undefined;\n\t }\n\t\n\t var existing = Component.STYLES || [];\n\t var propTypes = Component.propTypes || {};\n\t\n\t styles.forEach(function (style) {\n\t if (existing.indexOf(style) === -1) {\n\t existing.push(style);\n\t }\n\t });\n\t\n\t var propType = _propTypes2['default'].oneOf(existing);\n\t\n\t // expose the values on the propType function for documentation\n\t Component.STYLES = propType._values = existing;\n\t\n\t Component.propTypes = (0, _extends3['default'])({}, propTypes, {\n\t bsStyle: propType\n\t });\n\t\n\t if (defaultStyle !== undefined) {\n\t var defaultProps = Component.defaultProps || (Component.defaultProps = {});\n\t defaultProps.bsStyle = defaultStyle;\n\t }\n\t\n\t return Component;\n\t});\n\t\n\tvar bsSizes = exports.bsSizes = curry(function (sizes, defaultSize, Component) {\n\t if (typeof defaultSize !== 'string') {\n\t Component = defaultSize;\n\t defaultSize = undefined;\n\t }\n\t\n\t var existing = Component.SIZES || [];\n\t var propTypes = Component.propTypes || {};\n\t\n\t sizes.forEach(function (size) {\n\t if (existing.indexOf(size) === -1) {\n\t existing.push(size);\n\t }\n\t });\n\t\n\t var values = [];\n\t existing.forEach(function (size) {\n\t var mappedSize = _StyleConfig.SIZE_MAP[size];\n\t if (mappedSize && mappedSize !== size) {\n\t values.push(mappedSize);\n\t }\n\t\n\t values.push(size);\n\t });\n\t\n\t var propType = _propTypes2['default'].oneOf(values);\n\t propType._values = values;\n\t\n\t // expose the values on the propType function for documentation\n\t Component.SIZES = existing;\n\t\n\t Component.propTypes = (0, _extends3['default'])({}, propTypes, {\n\t bsSize: propType\n\t });\n\t\n\t if (defaultSize !== undefined) {\n\t if (!Component.defaultProps) {\n\t Component.defaultProps = {};\n\t }\n\t Component.defaultProps.bsSize = defaultSize;\n\t }\n\t\n\t return Component;\n\t});\n\t\n\tfunction getClassSet(props) {\n\t var _classes;\n\t\n\t var classes = (_classes = {}, _classes[prefix(props)] = true, _classes);\n\t\n\t if (props.bsSize) {\n\t var bsSize = _StyleConfig.SIZE_MAP[props.bsSize] || props.bsSize;\n\t classes[prefix(props, bsSize)] = true;\n\t }\n\t\n\t if (props.bsStyle) {\n\t classes[prefix(props, props.bsStyle)] = true;\n\t }\n\t\n\t return classes;\n\t}\n\t\n\tfunction getBsProps(props) {\n\t return {\n\t bsClass: props.bsClass,\n\t bsSize: props.bsSize,\n\t bsStyle: props.bsStyle,\n\t bsRole: props.bsRole\n\t };\n\t}\n\t\n\tfunction isBsProp(propName) {\n\t return propName === 'bsClass' || propName === 'bsSize' || propName === 'bsStyle' || propName === 'bsRole';\n\t}\n\t\n\tfunction splitBsProps(props) {\n\t var elementProps = {};\n\t (0, _entries2['default'])(props).forEach(function (_ref) {\n\t var propName = _ref[0],\n\t propValue = _ref[1];\n\t\n\t if (!isBsProp(propName)) {\n\t elementProps[propName] = propValue;\n\t }\n\t });\n\t\n\t return [getBsProps(props), elementProps];\n\t}\n\t\n\tfunction splitBsPropsAndOmit(props, omittedPropNames) {\n\t var isOmittedProp = {};\n\t omittedPropNames.forEach(function (propName) {\n\t isOmittedProp[propName] = true;\n\t });\n\t\n\t var elementProps = {};\n\t (0, _entries2['default'])(props).forEach(function (_ref2) {\n\t var propName = _ref2[0],\n\t propValue = _ref2[1];\n\t\n\t if (!isBsProp(propName) && !isOmittedProp[propName]) {\n\t elementProps[propName] = propValue;\n\t }\n\t });\n\t\n\t return [getBsProps(props), elementProps];\n\t}\n\t\n\t/**\n\t * Add a style variant to a Component. Mutates the propTypes of the component\n\t * in order to validate the new variant.\n\t */\n\tfunction addStyle(Component) {\n\t for (var _len2 = arguments.length, styleVariant = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n\t styleVariant[_key2 - 1] = arguments[_key2];\n\t }\n\t\n\t bsStyles(styleVariant, Component);\n\t}\n\t\n\tvar _curry = exports._curry = curry;\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * Use invariant() to assert state which your program assumes to be true.\n\t *\n\t * Provide sprintf-style format (only %s is supported) and arguments\n\t * to provide information about what broke and what you were\n\t * expecting.\n\t *\n\t * The invariant message will be stripped in production, but the invariant\n\t * will remain to ensure logic does not differ in production.\n\t */\n\t\n\tvar validateFormat = function validateFormat(format) {};\n\t\n\tif (false) {\n\t validateFormat = function validateFormat(format) {\n\t if (format === undefined) {\n\t throw new Error('invariant requires an error message argument');\n\t }\n\t };\n\t}\n\t\n\tfunction invariant(condition, format, a, b, c, d, e, f) {\n\t validateFormat(format);\n\t\n\t if (!condition) {\n\t var error;\n\t if (format === undefined) {\n\t error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n\t } else {\n\t var args = [a, b, c, d, e, f];\n\t var argIndex = 0;\n\t error = new Error(format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t }));\n\t error.name = 'Invariant Violation';\n\t }\n\t\n\t error.framesToPop = 1; // we don't care about invariant's own frame\n\t throw error;\n\t }\n\t}\n\t\n\tmodule.exports = invariant;\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(79);\n\tmodule.exports.easing = __webpack_require__(588);\n\tmodule.exports.canvas = __webpack_require__(587);\n\tmodule.exports.options = __webpack_require__(589);\n\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2014-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar emptyFunction = __webpack_require__(28);\n\t\n\t/**\n\t * Similar to invariant but only logs a warning if the condition is not met.\n\t * This can be used to log issues in development environments in critical\n\t * paths. Removing the logging code for production environments will keep the\n\t * same logic and follow the same code paths.\n\t */\n\t\n\tvar warning = emptyFunction;\n\t\n\tif (false) {\n\t var printWarning = function printWarning(format) {\n\t for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\t\n\t var argIndex = 0;\n\t var message = 'Warning: ' + format.replace(/%s/g, function () {\n\t return args[argIndex++];\n\t });\n\t if (typeof console !== 'undefined') {\n\t console.error(message);\n\t }\n\t try {\n\t // --- Welcome to debugging React ---\n\t // This error was thrown as a convenience so that you can use this stack\n\t // to find the callsite that caused this warning to fire.\n\t throw new Error(message);\n\t } catch (x) {}\n\t };\n\t\n\t warning = function warning(condition, format) {\n\t if (format === undefined) {\n\t throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n\t }\n\t\n\t if (format.indexOf('Failed Composite propType: ') === 0) {\n\t return; // Ignore CompositeComponent proptype check.\n\t }\n\t\n\t if (!condition) {\n\t for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n\t args[_key2 - 2] = arguments[_key2];\n\t }\n\t\n\t printWarning.apply(undefined, [format].concat(args));\n\t }\n\t };\n\t}\n\t\n\tmodule.exports = warning;\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t'use strict';\n\t\n\t/**\n\t * WARNING: DO NOT manually require this module.\n\t * This is a replacement for `invariant(...)` used by the error code system\n\t * and will _only_ be required by the corresponding babel pass.\n\t * It always throws.\n\t */\n\t\n\tfunction reactProdInvariant(code) {\n\t var argCount = arguments.length - 1;\n\t\n\t var message = 'Minified React error #' + code + '; visit ' + 'http://facebook.github.io/react/docs/error-decoder.html?invariant=' + code;\n\t\n\t for (var argIdx = 0; argIdx < argCount; argIdx++) {\n\t message += '&args[]=' + encodeURIComponent(arguments[argIdx + 1]);\n\t }\n\t\n\t message += ' for the full message or use the non-minified dev environment' + ' for full errors and additional helpful warnings.';\n\t\n\t var error = new Error(message);\n\t error.name = 'Invariant Violation';\n\t error.framesToPop = 1; // we don't care about reactProdInvariant's own frame\n\t\n\t throw error;\n\t}\n\t\n\tmodule.exports = reactProdInvariant;\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _createChainableTypeChecker = __webpack_require__(107);\n\t\n\tvar _createChainableTypeChecker2 = _interopRequireDefault(_createChainableTypeChecker);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction elementType(props, propName, componentName, location, propFullName) {\n\t var propValue = props[propName];\n\t var propType = typeof propValue === 'undefined' ? 'undefined' : _typeof(propValue);\n\t\n\t if (_react2.default.isValidElement(propValue)) {\n\t return new Error('Invalid ' + location + ' `' + propFullName + '` of type ReactElement ' + ('supplied to `' + componentName + '`, expected an element type (a string ') + 'or a ReactClass).');\n\t }\n\t\n\t if (propType !== 'function' && propType !== 'string') {\n\t return new Error('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected an element type (a string ') + 'or a ReactClass).');\n\t }\n\t\n\t return null;\n\t}\n\t\n\texports.default = (0, _createChainableTypeChecker2.default)(elementType);\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar helpers = __webpack_require__(13);\n\t\n\tmodule.exports = {\n\t\t/**\n\t\t * @private\n\t\t */\n\t\t_set: function(scope, values) {\n\t\t\treturn helpers.merge(this[scope] || (this[scope] = {}), values);\n\t\t}\n\t};\n\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\t/*\n\tobject-assign\n\t(c) Sindre Sorhus\n\t@license MIT\n\t*/\n\t\n\t'use strict';\n\t/* eslint-disable no-unused-vars */\n\tvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\n\tvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\tvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\t\n\tfunction toObject(val) {\n\t\tif (val === null || val === undefined) {\n\t\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t\t}\n\t\n\t\treturn Object(val);\n\t}\n\t\n\tfunction shouldUseNative() {\n\t\ttry {\n\t\t\tif (!Object.assign) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// Detect buggy property enumeration order in older V8 versions.\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\t\ttest1[5] = 'de';\n\t\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test2 = {};\n\t\t\tfor (var i = 0; i < 10; i++) {\n\t\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t\t}\n\t\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\t\treturn test2[n];\n\t\t\t});\n\t\t\tif (order2.join('') !== '0123456789') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\t\tvar test3 = {};\n\t\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\t\ttest3[letter] = letter;\n\t\t\t});\n\t\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\t\treturn false;\n\t\t\t}\n\t\n\t\t\treturn true;\n\t\t} catch (err) {\n\t\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\t\treturn false;\n\t\t}\n\t}\n\t\n\tmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\t\tvar from;\n\t\tvar to = toObject(target);\n\t\tvar symbols;\n\t\n\t\tfor (var s = 1; s < arguments.length; s++) {\n\t\t\tfrom = Object(arguments[s]);\n\t\n\t\t\tfor (var key in from) {\n\t\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\t\tto[key] = from[key];\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tif (getOwnPropertySymbols) {\n\t\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\treturn to;\n\t};\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2014-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * Similar to invariant but only logs a warning if the condition is not met.\n\t * This can be used to log issues in development environments in critical\n\t * paths. Removing the logging code for production environments will keep the\n\t * same logic and follow the same code paths.\n\t */\n\t\n\tvar warning = function() {};\n\t\n\tif (false) {\n\t warning = function(condition, format, args) {\n\t var len = arguments.length;\n\t args = new Array(len > 2 ? len - 2 : 0);\n\t for (var key = 2; key < len; key++) {\n\t args[key - 2] = arguments[key];\n\t }\n\t if (format === undefined) {\n\t throw new Error(\n\t '`warning(condition, format, ...args)` requires a warning ' +\n\t 'message argument'\n\t );\n\t }\n\t\n\t if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n\t throw new Error(\n\t 'The warning format should be able to uniquely identify this ' +\n\t 'warning. Please, use a more descriptive format than: ' + format\n\t );\n\t }\n\t\n\t if (!condition) {\n\t var argIndex = 0;\n\t var message = 'Warning: ' +\n\t format.replace(/%s/g, function() {\n\t return args[argIndex++];\n\t });\n\t if (typeof console !== 'undefined') {\n\t console.error(message);\n\t }\n\t try {\n\t // This error was thrown as a convenience so that you can use this stack\n\t // to find the callsite that caused this warning to fire.\n\t throw new Error(message);\n\t } catch(x) {}\n\t }\n\t };\n\t}\n\t\n\tmodule.exports = warning;\n\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar _prodInvariant = __webpack_require__(15);\n\t\n\tvar DOMProperty = __webpack_require__(61);\n\tvar ReactDOMComponentFlags = __webpack_require__(481);\n\t\n\tvar invariant = __webpack_require__(12);\n\t\n\tvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\n\tvar Flags = ReactDOMComponentFlags;\n\t\n\tvar internalInstanceKey = '__reactInternalInstance$' + Math.random().toString(36).slice(2);\n\t\n\t/**\n\t * Check if a given node should be cached.\n\t */\n\tfunction shouldPrecacheNode(node, nodeID) {\n\t return node.nodeType === 1 && node.getAttribute(ATTR_NAME) === String(nodeID) || node.nodeType === 8 && node.nodeValue === ' react-text: ' + nodeID + ' ' || node.nodeType === 8 && node.nodeValue === ' react-empty: ' + nodeID + ' ';\n\t}\n\t\n\t/**\n\t * Drill down (through composites and empty components) until we get a host or\n\t * host text component.\n\t *\n\t * This is pretty polymorphic but unavoidable with the current structure we have\n\t * for `_renderedChildren`.\n\t */\n\tfunction getRenderedHostOrTextFromComponent(component) {\n\t var rendered;\n\t while (rendered = component._renderedComponent) {\n\t component = rendered;\n\t }\n\t return component;\n\t}\n\t\n\t/**\n\t * Populate `_hostNode` on the rendered host/text component with the given\n\t * DOM node. The passed `inst` can be a composite.\n\t */\n\tfunction precacheNode(inst, node) {\n\t var hostInst = getRenderedHostOrTextFromComponent(inst);\n\t hostInst._hostNode = node;\n\t node[internalInstanceKey] = hostInst;\n\t}\n\t\n\tfunction uncacheNode(inst) {\n\t var node = inst._hostNode;\n\t if (node) {\n\t delete node[internalInstanceKey];\n\t inst._hostNode = null;\n\t }\n\t}\n\t\n\t/**\n\t * Populate `_hostNode` on each child of `inst`, assuming that the children\n\t * match up with the DOM (element) children of `node`.\n\t *\n\t * We cache entire levels at once to avoid an n^2 problem where we access the\n\t * children of a node sequentially and have to walk from the start to our target\n\t * node every time.\n\t *\n\t * Since we update `_renderedChildren` and the actual DOM at (slightly)\n\t * different times, we could race here and see a newer `_renderedChildren` than\n\t * the DOM nodes we see. To avoid this, ReactMultiChild calls\n\t * `prepareToManageChildren` before we change `_renderedChildren`, at which\n\t * time the container's child nodes are always cached (until it unmounts).\n\t */\n\tfunction precacheChildNodes(inst, node) {\n\t if (inst._flags & Flags.hasCachedChildNodes) {\n\t return;\n\t }\n\t var children = inst._renderedChildren;\n\t var childNode = node.firstChild;\n\t outer: for (var name in children) {\n\t if (!children.hasOwnProperty(name)) {\n\t continue;\n\t }\n\t var childInst = children[name];\n\t var childID = getRenderedHostOrTextFromComponent(childInst)._domID;\n\t if (childID === 0) {\n\t // We're currently unmounting this child in ReactMultiChild; skip it.\n\t continue;\n\t }\n\t // We assume the child nodes are in the same order as the child instances.\n\t for (; childNode !== null; childNode = childNode.nextSibling) {\n\t if (shouldPrecacheNode(childNode, childID)) {\n\t precacheNode(childInst, childNode);\n\t continue outer;\n\t }\n\t }\n\t // We reached the end of the DOM children without finding an ID match.\n\t true ? false ? invariant(false, 'Unable to find element with ID %s.', childID) : _prodInvariant('32', childID) : void 0;\n\t }\n\t inst._flags |= Flags.hasCachedChildNodes;\n\t}\n\t\n\t/**\n\t * Given a DOM node, return the closest ReactDOMComponent or\n\t * ReactDOMTextComponent instance ancestor.\n\t */\n\tfunction getClosestInstanceFromNode(node) {\n\t if (node[internalInstanceKey]) {\n\t return node[internalInstanceKey];\n\t }\n\t\n\t // Walk up the tree until we find an ancestor whose instance we have cached.\n\t var parents = [];\n\t while (!node[internalInstanceKey]) {\n\t parents.push(node);\n\t if (node.parentNode) {\n\t node = node.parentNode;\n\t } else {\n\t // Top of the tree. This node must not be part of a React tree (or is\n\t // unmounted, potentially).\n\t return null;\n\t }\n\t }\n\t\n\t var closest;\n\t var inst;\n\t for (; node && (inst = node[internalInstanceKey]); node = parents.pop()) {\n\t closest = inst;\n\t if (parents.length) {\n\t precacheChildNodes(inst, node);\n\t }\n\t }\n\t\n\t return closest;\n\t}\n\t\n\t/**\n\t * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n\t * instance, or null if the node was not rendered by this React.\n\t */\n\tfunction getInstanceFromNode(node) {\n\t var inst = getClosestInstanceFromNode(node);\n\t if (inst != null && inst._hostNode === node) {\n\t return inst;\n\t } else {\n\t return null;\n\t }\n\t}\n\t\n\t/**\n\t * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n\t * DOM node.\n\t */\n\tfunction getNodeFromInstance(inst) {\n\t // Without this first invariant, passing a non-DOM-component triggers the next\n\t // invariant for a missing parent, which is super confusing.\n\t !(inst._hostNode !== undefined) ? false ? invariant(false, 'getNodeFromInstance: Invalid argument.') : _prodInvariant('33') : void 0;\n\t\n\t if (inst._hostNode) {\n\t return inst._hostNode;\n\t }\n\t\n\t // Walk up the tree until we find an ancestor whose DOM node we have cached.\n\t var parents = [];\n\t while (!inst._hostNode) {\n\t parents.push(inst);\n\t !inst._hostParent ? false ? invariant(false, 'React DOM tree root should always have a node reference.') : _prodInvariant('34') : void 0;\n\t inst = inst._hostParent;\n\t }\n\t\n\t // Now parents contains each ancestor that does *not* have a cached native\n\t // node, and `inst` is the deepest ancestor that does.\n\t for (; parents.length; inst = parents.pop()) {\n\t precacheChildNodes(inst, inst._hostNode);\n\t }\n\t\n\t return inst._hostNode;\n\t}\n\t\n\tvar ReactDOMComponentTree = {\n\t getClosestInstanceFromNode: getClosestInstanceFromNode,\n\t getInstanceFromNode: getInstanceFromNode,\n\t getNodeFromInstance: getNodeFromInstance,\n\t precacheChildNodes: precacheChildNodes,\n\t precacheNode: precacheNode,\n\t uncacheNode: uncacheNode\n\t};\n\t\n\tmodule.exports = ReactDOMComponentTree;\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t/**\n\t * Safe chained function\n\t *\n\t * Will only create a new function if needed,\n\t * otherwise will pass back existing functions or null.\n\t *\n\t * @param {function} functions to chain\n\t * @returns {function|null}\n\t */\n\tfunction createChainedFunction() {\n\t for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n\t funcs[_key] = arguments[_key];\n\t }\n\t\n\t return funcs.filter(function (f) {\n\t return f != null;\n\t }).reduce(function (acc, f) {\n\t if (typeof f !== 'function') {\n\t throw new Error('Invalid Argument Type, must only provide functions, undefined, or null.');\n\t }\n\t\n\t if (acc === null) {\n\t return f;\n\t }\n\t\n\t return function chainedFunction() {\n\t for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t args[_key2] = arguments[_key2];\n\t }\n\t\n\t acc.apply(this, args);\n\t f.apply(this, args);\n\t };\n\t }, null);\n\t}\n\t\n\texports['default'] = createChainedFunction;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\tvar Size = exports.Size = {\n\t LARGE: 'large',\n\t SMALL: 'small',\n\t XSMALL: 'xsmall'\n\t};\n\t\n\tvar SIZE_MAP = exports.SIZE_MAP = {\n\t large: 'lg',\n\t medium: 'md',\n\t small: 'sm',\n\t xsmall: 'xs',\n\t lg: 'lg',\n\t md: 'md',\n\t sm: 'sm',\n\t xs: 'xs'\n\t};\n\t\n\tvar DEVICE_SIZES = exports.DEVICE_SIZES = ['lg', 'md', 'sm', 'xs'];\n\t\n\tvar State = exports.State = {\n\t SUCCESS: 'success',\n\t WARNING: 'warning',\n\t DANGER: 'danger',\n\t INFO: 'info'\n\t};\n\t\n\tvar Style = exports.Style = {\n\t DEFAULT: 'default',\n\t PRIMARY: 'primary',\n\t LINK: 'link',\n\t INVERSE: 'inverse'\n\t};\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(888);\n\n\n/***/ },\n/* 24 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\t\n\t/**\n\t * Simple, lightweight module assisting with the detection and context of\n\t * Worker. Helps avoid circular dependencies and allows code to reason about\n\t * whether or not they are in a Worker, even if they never include the main\n\t * `ReactWorker` dependency.\n\t */\n\tvar ExecutionEnvironment = {\n\t\n\t canUseDOM: canUseDOM,\n\t\n\t canUseWorkers: typeof Worker !== 'undefined',\n\t\n\t canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\t\n\t canUseViewport: canUseDOM && !!window.screen,\n\t\n\t isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\t\n\t};\n\t\n\tmodule.exports = ExecutionEnvironment;\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\tvar core = module.exports = { version: '2.5.3' };\n\tif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\t/**\n\t * Iterates through children that are typically specified as `props.children`,\n\t * but only maps over children that are \"valid components\".\n\t *\n\t * The mapFunction provided index will be normalised to the components mapped,\n\t * so an invalid component would not increase the index.\n\t *\n\t * @param {?*} children Children tree container.\n\t * @param {function(*, int)} func.\n\t * @param {*} context Context for func.\n\t * @return {object} Object containing the ordered map of results.\n\t */\n\tfunction map(children, func, context) {\n\t var index = 0;\n\t\n\t return _react2['default'].Children.map(children, function (child) {\n\t if (!_react2['default'].isValidElement(child)) {\n\t return child;\n\t }\n\t\n\t return func.call(context, child, index++);\n\t });\n\t}\n\t\n\t/**\n\t * Iterates through children that are \"valid components\".\n\t *\n\t * The provided forEachFunc(child, index) will be called for each\n\t * leaf child with the index reflecting the position relative to \"valid components\".\n\t *\n\t * @param {?*} children Children tree container.\n\t * @param {function(*, int)} func.\n\t * @param {*} context Context for context.\n\t */\n\t// TODO: This module should be ElementChildren, and should use named exports.\n\t\n\tfunction forEach(children, func, context) {\n\t var index = 0;\n\t\n\t _react2['default'].Children.forEach(children, function (child) {\n\t if (!_react2['default'].isValidElement(child)) {\n\t return;\n\t }\n\t\n\t func.call(context, child, index++);\n\t });\n\t}\n\t\n\t/**\n\t * Count the number of \"valid components\" in the Children container.\n\t *\n\t * @param {?*} children Children tree container.\n\t * @returns {number}\n\t */\n\tfunction count(children) {\n\t var result = 0;\n\t\n\t _react2['default'].Children.forEach(children, function (child) {\n\t if (!_react2['default'].isValidElement(child)) {\n\t return;\n\t }\n\t\n\t ++result;\n\t });\n\t\n\t return result;\n\t}\n\t\n\t/**\n\t * Finds children that are typically specified as `props.children`,\n\t * but only iterates over children that are \"valid components\".\n\t *\n\t * The provided forEachFunc(child, index) will be called for each\n\t * leaf child with the index reflecting the position relative to \"valid components\".\n\t *\n\t * @param {?*} children Children tree container.\n\t * @param {function(*, int)} func.\n\t * @param {*} context Context for func.\n\t * @returns {array} of children that meet the func return statement\n\t */\n\tfunction filter(children, func, context) {\n\t var index = 0;\n\t var result = [];\n\t\n\t _react2['default'].Children.forEach(children, function (child) {\n\t if (!_react2['default'].isValidElement(child)) {\n\t return;\n\t }\n\t\n\t if (func.call(context, child, index++)) {\n\t result.push(child);\n\t }\n\t });\n\t\n\t return result;\n\t}\n\t\n\tfunction find(children, func, context) {\n\t var index = 0;\n\t var result = undefined;\n\t\n\t _react2['default'].Children.forEach(children, function (child) {\n\t if (result) {\n\t return;\n\t }\n\t if (!_react2['default'].isValidElement(child)) {\n\t return;\n\t }\n\t\n\t if (func.call(context, child, index++)) {\n\t result = child;\n\t }\n\t });\n\t\n\t return result;\n\t}\n\t\n\tfunction every(children, func, context) {\n\t var index = 0;\n\t var result = true;\n\t\n\t _react2['default'].Children.forEach(children, function (child) {\n\t if (!result) {\n\t return;\n\t }\n\t if (!_react2['default'].isValidElement(child)) {\n\t return;\n\t }\n\t\n\t if (!func.call(context, child, index++)) {\n\t result = false;\n\t }\n\t });\n\t\n\t return result;\n\t}\n\t\n\tfunction some(children, func, context) {\n\t var index = 0;\n\t var result = false;\n\t\n\t _react2['default'].Children.forEach(children, function (child) {\n\t if (result) {\n\t return;\n\t }\n\t if (!_react2['default'].isValidElement(child)) {\n\t return;\n\t }\n\t\n\t if (func.call(context, child, index++)) {\n\t result = true;\n\t }\n\t });\n\t\n\t return result;\n\t}\n\t\n\tfunction toArray(children) {\n\t var result = [];\n\t\n\t _react2['default'].Children.forEach(children, function (child) {\n\t if (!_react2['default'].isValidElement(child)) {\n\t return;\n\t }\n\t\n\t result.push(child);\n\t });\n\t\n\t return result;\n\t}\n\t\n\texports['default'] = {\n\t map: map,\n\t forEach: forEach,\n\t count: count,\n\t find: find,\n\t filter: filter,\n\t every: every,\n\t some: some,\n\t toArray: toArray\n\t};\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar bind = __webpack_require__(172);\n\t\n\t/*global toString:true*/\n\t\n\t// utils is a library of generic helper functions non-specific to axios\n\t\n\tvar toString = Object.prototype.toString;\n\t\n\t/**\n\t * Determine if a value is an Array\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Array, otherwise false\n\t */\n\tfunction isArray(val) {\n\t return toString.call(val) === '[object Array]';\n\t}\n\t\n\t/**\n\t * Determine if a value is an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBuffer(val) {\n\t return toString.call(val) === '[object ArrayBuffer]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a FormData\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an FormData, otherwise false\n\t */\n\tfunction isFormData(val) {\n\t return (typeof FormData !== 'undefined') && (val instanceof FormData);\n\t}\n\t\n\t/**\n\t * Determine if a value is a view on an ArrayBuffer\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n\t */\n\tfunction isArrayBufferView(val) {\n\t var result;\n\t if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n\t result = ArrayBuffer.isView(val);\n\t } else {\n\t result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Determine if a value is a String\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a String, otherwise false\n\t */\n\tfunction isString(val) {\n\t return typeof val === 'string';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Number\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Number, otherwise false\n\t */\n\tfunction isNumber(val) {\n\t return typeof val === 'number';\n\t}\n\t\n\t/**\n\t * Determine if a value is undefined\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if the value is undefined, otherwise false\n\t */\n\tfunction isUndefined(val) {\n\t return typeof val === 'undefined';\n\t}\n\t\n\t/**\n\t * Determine if a value is an Object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is an Object, otherwise false\n\t */\n\tfunction isObject(val) {\n\t return val !== null && typeof val === 'object';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Date\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Date, otherwise false\n\t */\n\tfunction isDate(val) {\n\t return toString.call(val) === '[object Date]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a File\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a File, otherwise false\n\t */\n\tfunction isFile(val) {\n\t return toString.call(val) === '[object File]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Blob\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Blob, otherwise false\n\t */\n\tfunction isBlob(val) {\n\t return toString.call(val) === '[object Blob]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Function\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Function, otherwise false\n\t */\n\tfunction isFunction(val) {\n\t return toString.call(val) === '[object Function]';\n\t}\n\t\n\t/**\n\t * Determine if a value is a Stream\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a Stream, otherwise false\n\t */\n\tfunction isStream(val) {\n\t return isObject(val) && isFunction(val.pipe);\n\t}\n\t\n\t/**\n\t * Determine if a value is a URLSearchParams object\n\t *\n\t * @param {Object} val The value to test\n\t * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n\t */\n\tfunction isURLSearchParams(val) {\n\t return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n\t}\n\t\n\t/**\n\t * Trim excess whitespace off the beginning and end of a string\n\t *\n\t * @param {String} str The String to trim\n\t * @returns {String} The String freed of excess whitespace\n\t */\n\tfunction trim(str) {\n\t return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\t}\n\t\n\t/**\n\t * Determine if we're running in a standard browser environment\n\t *\n\t * This allows axios to run in a web worker, and react-native.\n\t * Both environments support XMLHttpRequest, but not fully standard globals.\n\t *\n\t * web workers:\n\t * typeof window -> undefined\n\t * typeof document -> undefined\n\t *\n\t * react-native:\n\t * typeof document.createElement -> undefined\n\t */\n\tfunction isStandardBrowserEnv() {\n\t return (\n\t typeof window !== 'undefined' &&\n\t typeof document !== 'undefined' &&\n\t typeof document.createElement === 'function'\n\t );\n\t}\n\t\n\t/**\n\t * Iterate over an Array or an Object invoking a function for each item.\n\t *\n\t * If `obj` is an Array callback will be called passing\n\t * the value, index, and complete array for each item.\n\t *\n\t * If 'obj' is an Object callback will be called passing\n\t * the value, key, and complete object for each property.\n\t *\n\t * @param {Object|Array} obj The object to iterate\n\t * @param {Function} fn The callback to invoke for each item\n\t */\n\tfunction forEach(obj, fn) {\n\t // Don't bother if no value provided\n\t if (obj === null || typeof obj === 'undefined') {\n\t return;\n\t }\n\t\n\t // Force an array if not already something iterable\n\t if (typeof obj !== 'object' && !isArray(obj)) {\n\t /*eslint no-param-reassign:0*/\n\t obj = [obj];\n\t }\n\t\n\t if (isArray(obj)) {\n\t // Iterate over array values\n\t for (var i = 0, l = obj.length; i < l; i++) {\n\t fn.call(null, obj[i], i, obj);\n\t }\n\t } else {\n\t // Iterate over object keys\n\t for (var key in obj) {\n\t if (Object.prototype.hasOwnProperty.call(obj, key)) {\n\t fn.call(null, obj[key], key, obj);\n\t }\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * Accepts varargs expecting each argument to be an object, then\n\t * immutably merges the properties of each object and returns result.\n\t *\n\t * When multiple objects contain the same key the later object in\n\t * the arguments list will take precedence.\n\t *\n\t * Example:\n\t *\n\t * ```js\n\t * var result = merge({foo: 123}, {foo: 456});\n\t * console.log(result.foo); // outputs 456\n\t * ```\n\t *\n\t * @param {Object} obj1 Object to merge\n\t * @returns {Object} Result of all merge properties\n\t */\n\tfunction merge(/* obj1, obj2, obj3, ... */) {\n\t var result = {};\n\t function assignValue(val, key) {\n\t if (typeof result[key] === 'object' && typeof val === 'object') {\n\t result[key] = merge(result[key], val);\n\t } else {\n\t result[key] = val;\n\t }\n\t }\n\t\n\t for (var i = 0, l = arguments.length; i < l; i++) {\n\t forEach(arguments[i], assignValue);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Extends object a by mutably adding to it the properties of object b.\n\t *\n\t * @param {Object} a The object to be extended\n\t * @param {Object} b The object to copy properties from\n\t * @param {Object} thisArg The object to bind function to\n\t * @return {Object} The resulting value of object a\n\t */\n\tfunction extend(a, b, thisArg) {\n\t forEach(b, function assignValue(val, key) {\n\t if (thisArg && typeof val === 'function') {\n\t a[key] = bind(val, thisArg);\n\t } else {\n\t a[key] = val;\n\t }\n\t });\n\t return a;\n\t}\n\t\n\tmodule.exports = {\n\t isArray: isArray,\n\t isArrayBuffer: isArrayBuffer,\n\t isFormData: isFormData,\n\t isArrayBufferView: isArrayBufferView,\n\t isString: isString,\n\t isNumber: isNumber,\n\t isObject: isObject,\n\t isUndefined: isUndefined,\n\t isDate: isDate,\n\t isFile: isFile,\n\t isBlob: isBlob,\n\t isFunction: isFunction,\n\t isStream: isStream,\n\t isURLSearchParams: isURLSearchParams,\n\t isStandardBrowserEnv: isStandardBrowserEnv,\n\t forEach: forEach,\n\t merge: merge,\n\t extend: extend,\n\t trim: trim\n\t};\n\n\n/***/ },\n/* 28 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t\n\tfunction makeEmptyFunction(arg) {\n\t return function () {\n\t return arg;\n\t };\n\t}\n\t\n\t/**\n\t * This function accepts and discards inputs; it has no side effects. This is\n\t * primarily useful idiomatically for overridable function endpoints which\n\t * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n\t */\n\tvar emptyFunction = function emptyFunction() {};\n\t\n\temptyFunction.thatReturns = makeEmptyFunction;\n\temptyFunction.thatReturnsFalse = makeEmptyFunction(false);\n\temptyFunction.thatReturnsTrue = makeEmptyFunction(true);\n\temptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\temptyFunction.thatReturnsThis = function () {\n\t return this;\n\t};\n\temptyFunction.thatReturnsArgument = function (arg) {\n\t return arg;\n\t};\n\t\n\tmodule.exports = emptyFunction;\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2013-2015, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * LICENSE file in the root directory of this source tree. An additional grant\n\t * of patent rights can be found in the PATENTS file in the same directory.\n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * Use invariant() to assert state which your program assumes to be true.\n\t *\n\t * Provide sprintf-style format (only %s is supported) and arguments\n\t * to provide information about what broke and what you were\n\t * expecting.\n\t *\n\t * The invariant message will be stripped in production, but the invariant\n\t * will remain to ensure logic does not differ in production.\n\t */\n\t\n\tvar invariant = function(condition, format, a, b, c, d, e, f) {\n\t if (false) {\n\t if (format === undefined) {\n\t throw new Error('invariant requires an error message argument');\n\t }\n\t }\n\t\n\t if (!condition) {\n\t var error;\n\t if (format === undefined) {\n\t error = new Error(\n\t 'Minified exception occurred; use the non-minified dev environment ' +\n\t 'for the full error message and additional helpful warnings.'\n\t );\n\t } else {\n\t var args = [a, b, c, d, e, f];\n\t var argIndex = 0;\n\t error = new Error(\n\t format.replace(/%s/g, function() { return args[argIndex++]; })\n\t );\n\t error.name = 'Invariant Violation';\n\t }\n\t\n\t error.framesToPop = 1; // we don't care about invariant's own frame\n\t throw error;\n\t }\n\t};\n\t\n\tmodule.exports = invariant;\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar color = __webpack_require__(294);\n\tvar helpers = __webpack_require__(13);\n\t\n\tfunction interpolate(start, view, model, ease) {\n\t\tvar keys = Object.keys(model);\n\t\tvar i, ilen, key, actual, origin, target, type, c0, c1;\n\t\n\t\tfor (i = 0, ilen = keys.length; i < ilen; ++i) {\n\t\t\tkey = keys[i];\n\t\n\t\t\ttarget = model[key];\n\t\n\t\t\t// if a value is added to the model after pivot() has been called, the view\n\t\t\t// doesn't contain it, so let's initialize the view to the target value.\n\t\t\tif (!view.hasOwnProperty(key)) {\n\t\t\t\tview[key] = target;\n\t\t\t}\n\t\n\t\t\tactual = view[key];\n\t\n\t\t\tif (actual === target || key[0] === '_') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\n\t\t\tif (!start.hasOwnProperty(key)) {\n\t\t\t\tstart[key] = actual;\n\t\t\t}\n\t\n\t\t\torigin = start[key];\n\t\n\t\t\ttype = typeof target;\n\t\n\t\t\tif (type === typeof origin) {\n\t\t\t\tif (type === 'string') {\n\t\t\t\t\tc0 = color(origin);\n\t\t\t\t\tif (c0.valid) {\n\t\t\t\t\t\tc1 = color(target);\n\t\t\t\t\t\tif (c1.valid) {\n\t\t\t\t\t\t\tview[key] = c1.mix(c0, ease).rgbString();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (type === 'number' && isFinite(origin) && isFinite(target)) {\n\t\t\t\t\tview[key] = origin + (target - origin) * ease;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\tview[key] = target;\n\t\t}\n\t}\n\t\n\tvar Element = function(configuration) {\n\t\thelpers.extend(this, configuration);\n\t\tthis.initialize.apply(this, arguments);\n\t};\n\t\n\thelpers.extend(Element.prototype, {\n\t\n\t\tinitialize: function() {\n\t\t\tthis.hidden = false;\n\t\t},\n\t\n\t\tpivot: function() {\n\t\t\tvar me = this;\n\t\t\tif (!me._view) {\n\t\t\t\tme._view = helpers.clone(me._model);\n\t\t\t}\n\t\t\tme._start = {};\n\t\t\treturn me;\n\t\t},\n\t\n\t\ttransition: function(ease) {\n\t\t\tvar me = this;\n\t\t\tvar model = me._model;\n\t\t\tvar start = me._start;\n\t\t\tvar view = me._view;\n\t\n\t\t\t// No animation -> No Transition\n\t\t\tif (!model || ease === 1) {\n\t\t\t\tme._view = model;\n\t\t\t\tme._start = null;\n\t\t\t\treturn me;\n\t\t\t}\n\t\n\t\t\tif (!view) {\n\t\t\t\tview = me._view = {};\n\t\t\t}\n\t\n\t\t\tif (!start) {\n\t\t\t\tstart = me._start = {};\n\t\t\t}\n\t\n\t\t\tinterpolate(start, view, model, ease);\n\t\n\t\t\treturn me;\n\t\t},\n\t\n\t\ttooltipPosition: function() {\n\t\t\treturn {\n\t\t\t\tx: this._model.x,\n\t\t\t\ty: this._model.y\n\t\t\t};\n\t\t},\n\t\n\t\thasValue: function() {\n\t\t\treturn helpers.isNumber(this._model.x) && helpers.isNumber(this._model.y);\n\t\t}\n\t});\n\t\n\tElement.extend = helpers.inherits;\n\t\n\tmodule.exports = Element;\n\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar store = __webpack_require__(123)('wks');\n\tvar uid = __webpack_require__(80);\n\tvar Symbol = __webpack_require__(42).Symbol;\n\tvar USE_SYMBOL = typeof Symbol == 'function';\n\t\n\tvar $exports = module.exports = function (name) {\n\t return store[name] || (store[name] =\n\t USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n\t};\n\t\n\t$exports.store = store;\n\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2016-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t\n\t'use strict';\n\t\n\t// Trust the developer to only use ReactInstrumentation with a __DEV__ check\n\t\n\tvar debugTool = null;\n\t\n\tif (false) {\n\t var ReactDebugTool = require('./ReactDebugTool');\n\t debugTool = ReactDebugTool;\n\t}\n\t\n\tmodule.exports = { debugTool: debugTool };\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\t\n\tvar _extends2 = __webpack_require__(7);\n\t\n\tvar _extends3 = _interopRequireDefault(_extends2);\n\t\n\tvar _objectWithoutProperties2 = __webpack_require__(8);\n\t\n\tvar _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);\n\t\n\tvar _classCallCheck2 = __webpack_require__(4);\n\t\n\tvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\t\n\tvar _possibleConstructorReturn2 = __webpack_require__(6);\n\t\n\tvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\t\n\tvar _inherits2 = __webpack_require__(5);\n\t\n\tvar _inherits3 = _interopRequireDefault(_inherits2);\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _propTypes = __webpack_require__(9);\n\t\n\tvar _propTypes2 = _interopRequireDefault(_propTypes);\n\t\n\tvar _elementType = __webpack_require__(16);\n\t\n\tvar _elementType2 = _interopRequireDefault(_elementType);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar propTypes = {\n\t href: _propTypes2['default'].string,\n\t onClick: _propTypes2['default'].func,\n\t disabled: _propTypes2['default'].bool,\n\t role: _propTypes2['default'].string,\n\t tabIndex: _propTypes2['default'].oneOfType([_propTypes2['default'].number, _propTypes2['default'].string]),\n\t /**\n\t * this is sort of silly but needed for Button\n\t */\n\t componentClass: _elementType2['default']\n\t};\n\t\n\tvar defaultProps = {\n\t componentClass: 'a'\n\t};\n\t\n\tfunction isTrivialHref(href) {\n\t return !href || href.trim() === '#';\n\t}\n\t\n\t/**\n\t * There are situations due to browser quirks or Bootstrap CSS where\n\t * an anchor tag is needed, when semantically a button tag is the\n\t * better choice. SafeAnchor ensures that when an anchor is used like a\n\t * button its accessible. It also emulates input `disabled` behavior for\n\t * links, which is usually desirable for Buttons, NavItems, MenuItems, etc.\n\t */\n\t\n\tvar SafeAnchor = function (_React$Component) {\n\t (0, _inherits3['default'])(SafeAnchor, _React$Component);\n\t\n\t function SafeAnchor(props, context) {\n\t (0, _classCallCheck3['default'])(this, SafeAnchor);\n\t\n\t var _this = (0, _possibleConstructorReturn3['default'])(this, _React$Component.call(this, props, context));\n\t\n\t _this.handleClick = _this.handleClick.bind(_this);\n\t return _this;\n\t }\n\t\n\t SafeAnchor.prototype.handleClick = function handleClick(event) {\n\t var _props = this.props,\n\t disabled = _props.disabled,\n\t href = _props.href,\n\t onClick = _props.onClick;\n\t\n\t\n\t if (disabled || isTrivialHref(href)) {\n\t event.preventDefault();\n\t }\n\t\n\t if (disabled) {\n\t event.stopPropagation();\n\t return;\n\t }\n\t\n\t if (onClick) {\n\t onClick(event);\n\t }\n\t };\n\t\n\t SafeAnchor.prototype.render = function render() {\n\t var _props2 = this.props,\n\t Component = _props2.componentClass,\n\t disabled = _props2.disabled,\n\t props = (0, _objectWithoutProperties3['default'])(_props2, ['componentClass', 'disabled']);\n\t\n\t\n\t if (isTrivialHref(props.href)) {\n\t props.role = props.role || 'button';\n\t // we want to make sure there is a href attribute on the node\n\t // otherwise, the cursor incorrectly styled (except with role='button')\n\t props.href = props.href || '#';\n\t }\n\t\n\t if (disabled) {\n\t props.tabIndex = -1;\n\t props.style = (0, _extends3['default'])({ pointerEvents: 'none' }, props.style);\n\t }\n\t\n\t return _react2['default'].createElement(Component, (0, _extends3['default'])({}, props, {\n\t onClick: this.handleClick\n\t }));\n\t };\n\t\n\t return SafeAnchor;\n\t}(_react2['default'].Component);\n\t\n\tSafeAnchor.propTypes = propTypes;\n\tSafeAnchor.defaultProps = defaultProps;\n\t\n\texports['default'] = SafeAnchor;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\t\n\tvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\t\n\tvar _get = function get(_x3, _x4, _x5) { var _again = true; _function: while (_again) { var object = _x3, property = _x4, receiver = _x5; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x3 = parent; _x4 = property; _x5 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\tvar _reactDom = __webpack_require__(23);\n\t\n\tvar _reactDom2 = _interopRequireDefault(_reactDom);\n\t\n\tvar _propTypes = __webpack_require__(9);\n\t\n\tvar _propTypes2 = _interopRequireDefault(_propTypes);\n\t\n\tvar _baseStyles = __webpack_require__(863);\n\t\n\tvar _baseStyles2 = _interopRequireDefault(_baseStyles);\n\t\n\tvar _BurgerIcon = __webpack_require__(860);\n\t\n\tvar _BurgerIcon2 = _interopRequireDefault(_BurgerIcon);\n\t\n\tvar _CrossIcon = __webpack_require__(862);\n\t\n\tvar _CrossIcon2 = _interopRequireDefault(_CrossIcon);\n\t\n\texports['default'] = function (styles) {\n\t var Menu = (function (_Component) {\n\t _inherits(Menu, _Component);\n\t\n\t function Menu(props) {\n\t _classCallCheck(this, Menu);\n\t\n\t _get(Object.getPrototypeOf(Menu.prototype), 'constructor', this).call(this, props);\n\t this.state = {\n\t isOpen: false\n\t };\n\t }\n\t\n\t _createClass(Menu, [{\n\t key: 'toggleMenu',\n\t value: function toggleMenu() {\n\t var _this = this;\n\t\n\t var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t var isOpen = options.isOpen;\n\t var noStateChange = options.noStateChange;\n\t\n\t var newState = {\n\t isOpen: typeof isOpen !== 'undefined' ? isOpen : !this.state.isOpen\n\t };\n\t\n\t this.applyWrapperStyles();\n\t\n\t this.setState(newState, function () {\n\t !noStateChange && _this.props.onStateChange(newState);\n\t\n\t // Timeout ensures wrappers are cleared after animation finishes.\n\t _this.timeoutId && clearTimeout(_this.timeoutId);\n\t _this.timeoutId = setTimeout(function () {\n\t _this.timeoutId = null;\n\t if (!newState.isOpen) {\n\t _this.applyWrapperStyles(false);\n\t }\n\t }, 500);\n\t });\n\t }\n\t\n\t // Applies component-specific styles to external wrapper elements.\n\t }, {\n\t key: 'applyWrapperStyles',\n\t value: function applyWrapperStyles() {\n\t var set = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];\n\t\n\t if (this.props.bodyClassName) {\n\t var body = document.querySelector('body');\n\t body.classList[set ? 'add' : 'remove'](this.props.bodyClassName);\n\t }\n\t\n\t if (styles.pageWrap && this.props.pageWrapId) {\n\t this.handleExternalWrapper(this.props.pageWrapId, styles.pageWrap, set);\n\t }\n\t\n\t if (styles.outerContainer && this.props.outerContainerId) {\n\t this.handleExternalWrapper(this.props.outerContainerId, styles.outerContainer, set);\n\t }\n\t }\n\t\n\t // Sets or unsets styles on DOM elements outside the menu component.\n\t // This is necessary for correct page interaction with some of the menus.\n\t // Throws and returns if the required external elements don't exist,\n\t // which means any external page animations won't be applied.\n\t }, {\n\t key: 'handleExternalWrapper',\n\t value: function handleExternalWrapper(id, wrapperStyles, set) {\n\t var html = document.querySelector('html');\n\t var body = document.querySelector('body');\n\t var wrapper = document.getElementById(id);\n\t\n\t if (!wrapper) {\n\t console.error(\"Element with ID '\" + id + \"' not found\");\n\t return;\n\t }\n\t\n\t var builtStyles = this.getStyle(wrapperStyles);\n\t\n\t for (var prop in builtStyles) {\n\t if (builtStyles.hasOwnProperty(prop)) {\n\t wrapper.style[prop] = set ? builtStyles[prop] : '';\n\t }\n\t }\n\t\n\t // Prevent any horizontal scroll.\n\t [html, body].forEach(function (element) {\n\t element.style['overflow-x'] = set ? 'hidden' : '';\n\t });\n\t }\n\t\n\t // Builds styles incrementally for a given element.\n\t }, {\n\t key: 'getStyles',\n\t value: function getStyles(el, index, inline) {\n\t var propName = 'bm' + el.replace(el.charAt(0), el.charAt(0).toUpperCase());\n\t\n\t // Set base styles.\n\t var output = _baseStyles2['default'][el] ? this.getStyle(_baseStyles2['default'][el]) : {};\n\t\n\t // Add animation-specific styles.\n\t if (styles[el]) {\n\t output = _extends({}, output, this.getStyle(styles[el], index + 1));\n\t }\n\t\n\t // Add custom styles.\n\t if (this.props.styles[propName]) {\n\t output = _extends({}, output, this.props.styles[propName]);\n\t }\n\t\n\t // Add element inline styles.\n\t if (inline) {\n\t output = _extends({}, output, inline);\n\t }\n\t\n\t return output;\n\t }\n\t }, {\n\t key: 'getStyle',\n\t value: function getStyle(style, index) {\n\t var width = this.props.width;\n\t if (typeof width !== 'string') width = width + 'px';\n\t\n\t return style(this.state.isOpen, width, this.props.right, index);\n\t }\n\t }, {\n\t key: 'listenForClose',\n\t value: function listenForClose(e) {\n\t e = e || window.event;\n\t\n\t if (this.state.isOpen && (e.key === 'Escape' || e.keyCode === 27)) {\n\t this.toggleMenu();\n\t }\n\t }\n\t }, {\n\t key: 'shouldDisableOverlayClick',\n\t value: function shouldDisableOverlayClick() {\n\t if (typeof this.props.disableOverlayClick === 'function') {\n\t return this.props.disableOverlayClick();\n\t } else {\n\t return this.props.disableOverlayClick;\n\t }\n\t }\n\t }, {\n\t key: 'componentWillMount',\n\t value: function componentWillMount() {\n\t if (!styles) {\n\t throw new Error('No styles supplied');\n\t }\n\t }\n\t }, {\n\t key: 'componentDidMount',\n\t value: function componentDidMount() {\n\t window.onkeydown = this.listenForClose.bind(this);\n\t\n\t // Allow initial open state to be set by props.\n\t if (this.props.isOpen) {\n\t this.toggleMenu({ isOpen: true, noStateChange: true });\n\t }\n\t }\n\t }, {\n\t key: 'componentWillUnmount',\n\t value: function componentWillUnmount() {\n\t window.onkeydown = null;\n\t\n\t this.applyWrapperStyles(false);\n\t }\n\t }, {\n\t key: 'componentDidUpdate',\n\t value: function componentDidUpdate() {\n\t var _this2 = this;\n\t\n\t if (styles.svg) {\n\t (function () {\n\t var morphShape = _reactDom2['default'].findDOMNode(_this2, 'bm-morph-shape');\n\t var path = styles.svg.lib(morphShape).select('path');\n\t\n\t if (_this2.state.isOpen) {\n\t // Animate SVG path.\n\t styles.svg.animate(path);\n\t } else {\n\t // Reset path (timeout ensures animation happens off screen).\n\t setTimeout(function () {\n\t path.attr('d', styles.svg.pathInitial);\n\t }, 300);\n\t }\n\t })();\n\t }\n\t }\n\t }, {\n\t key: 'componentWillReceiveProps',\n\t value: function componentWillReceiveProps(nextProps) {\n\t if (typeof nextProps.isOpen !== 'undefined' && nextProps.isOpen !== this.state.isOpen) {\n\t this.toggleMenu();\n\t }\n\t }\n\t }, {\n\t key: 'render',\n\t value: function render() {\n\t var _this3 = this;\n\t\n\t return _react2['default'].createElement(\n\t 'div',\n\t null,\n\t !this.props.noOverlay && _react2['default'].createElement('div', {\n\t className: ('bm-overlay ' + this.props.overlayClassName).trim(),\n\t onClick: function () {\n\t return !_this3.shouldDisableOverlayClick() && _this3.toggleMenu();\n\t },\n\t style: this.getStyles('overlay')\n\t }),\n\t _react2['default'].createElement(\n\t 'div',\n\t {\n\t id: this.props.id,\n\t className: ('bm-menu-wrap ' + this.props.className).trim(),\n\t style: this.getStyles('menuWrap')\n\t },\n\t styles.svg && _react2['default'].createElement(\n\t 'div',\n\t {\n\t className: ('bm-morph-shape ' + this.props.morphShapeClassName).trim(),\n\t style: this.getStyles('morphShape')\n\t },\n\t _react2['default'].createElement(\n\t 'svg',\n\t {\n\t width: '100%',\n\t height: '100%',\n\t viewBox: '0 0 100 800',\n\t preserveAspectRatio: 'none'\n\t },\n\t _react2['default'].createElement('path', { d: styles.svg.pathInitial })\n\t )\n\t ),\n\t _react2['default'].createElement(\n\t 'div',\n\t {\n\t className: ('bm-menu ' + this.props.menuClassName).trim(),\n\t style: this.getStyles('menu')\n\t },\n\t _react2['default'].createElement(\n\t 'nav',\n\t {\n\t className: ('bm-item-list ' + this.props.itemListClassName).trim(),\n\t style: this.getStyles('itemList')\n\t },\n\t _react2['default'].Children.map(this.props.children, function (item, index) {\n\t if (item) {\n\t var extraProps = {\n\t key: index,\n\t style: _this3.getStyles('item', index, item.props.style)\n\t };\n\t return _react2['default'].cloneElement(item, extraProps);\n\t }\n\t })\n\t )\n\t ),\n\t this.props.customCrossIcon !== false && _react2['default'].createElement(\n\t 'div',\n\t { style: this.getStyles('closeButton') },\n\t _react2['default'].createElement(_CrossIcon2['default'], {\n\t onClick: function () {\n\t return _this3.toggleMenu();\n\t },\n\t styles: this.props.styles,\n\t customIcon: this.props.customCrossIcon,\n\t className: this.props.crossButtonClassName,\n\t crossClassName: this.props.crossClassName\n\t })\n\t )\n\t ),\n\t this.props.customBurgerIcon !== false && _react2['default'].createElement(\n\t 'div',\n\t { style: this.getStyles('burgerIcon') },\n\t _react2['default'].createElement(_BurgerIcon2['default'], {\n\t onClick: function () {\n\t return _this3.toggleMenu();\n\t },\n\t styles: this.props.styles,\n\t customIcon: this.props.customBurgerIcon,\n\t className: this.props.burgerButtonClassName,\n\t barClassName: this.props.burgerBarClassName\n\t })\n\t )\n\t );\n\t }\n\t }]);\n\t\n\t return Menu;\n\t })(_react.Component);\n\t\n\t Menu.propTypes = {\n\t bodyClassName: _propTypes2['default'].string,\n\t burgerBarClassName: _propTypes2['default'].string,\n\t burgerButtonClassName: _propTypes2['default'].string,\n\t crossButtonClassName: _propTypes2['default'].string,\n\t crossClassName: _propTypes2['default'].string,\n\t customBurgerIcon: _propTypes2['default'].oneOfType([_propTypes2['default'].element, _propTypes2['default'].oneOf([false])]),\n\t customCrossIcon: _propTypes2['default'].oneOfType([_propTypes2['default'].element, _propTypes2['default'].oneOf([false])]),\n\t disableOverlayClick: _propTypes2['default'].oneOfType([_propTypes2['default'].bool, _propTypes2['default'].func]),\n\t id: _propTypes2['default'].string,\n\t isOpen: _propTypes2['default'].bool,\n\t itemListClassName: _propTypes2['default'].string,\n\t menuClassName: _propTypes2['default'].string,\n\t morphShapeClassName: _propTypes2['default'].string,\n\t noOverlay: _propTypes2['default'].bool,\n\t onStateChange: _propTypes2['default'].func,\n\t outerContainerId: styles && styles.outerContainer ? _propTypes2['default'].string.isRequired : _propTypes2['default'].string,\n\t overlayClassName: _propTypes2['default'].string,\n\t pageWrapId: styles && styles.pageWrap ? _propTypes2['default'].string.isRequired : _propTypes2['default'].string,\n\t right: _propTypes2['default'].bool,\n\t styles: _propTypes2['default'].object,\n\t width: _propTypes2['default'].oneOfType([_propTypes2['default'].number, _propTypes2['default'].string])\n\t };\n\t\n\t Menu.defaultProps = {\n\t bodyClassName: '',\n\t burgerBarClassName: '',\n\t burgerButtonClassName: '',\n\t className: '',\n\t crossButtonClassName: '',\n\t crossClassName: '',\n\t id: '',\n\t itemListClassName: '',\n\t menuClassName: '',\n\t morphShapeClassName: '',\n\t noOverlay: false,\n\t onStateChange: function onStateChange() {},\n\t outerContainerId: '',\n\t overlayClassName: '',\n\t pageWrapId: '',\n\t styles: {},\n\t width: 300\n\t };\n\t\n\t return Menu;\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar _prodInvariant = __webpack_require__(15),\n\t _assign = __webpack_require__(18);\n\t\n\tvar CallbackQueue = __webpack_require__(479);\n\tvar PooledClass = __webpack_require__(49);\n\tvar ReactFeatureFlags = __webpack_require__(484);\n\tvar ReactReconciler = __webpack_require__(62);\n\tvar Transaction = __webpack_require__(102);\n\t\n\tvar invariant = __webpack_require__(12);\n\t\n\tvar dirtyComponents = [];\n\tvar updateBatchNumber = 0;\n\tvar asapCallbackQueue = CallbackQueue.getPooled();\n\tvar asapEnqueued = false;\n\t\n\tvar batchingStrategy = null;\n\t\n\tfunction ensureInjected() {\n\t !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? false ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching strategy') : _prodInvariant('123') : void 0;\n\t}\n\t\n\tvar NESTED_UPDATES = {\n\t initialize: function () {\n\t this.dirtyComponentsLength = dirtyComponents.length;\n\t },\n\t close: function () {\n\t if (this.dirtyComponentsLength !== dirtyComponents.length) {\n\t // Additional updates were enqueued by componentDidUpdate handlers or\n\t // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n\t // these new updates so that if A's componentDidUpdate calls setState on\n\t // B, B will update before the callback A's updater provided when calling\n\t // setState.\n\t dirtyComponents.splice(0, this.dirtyComponentsLength);\n\t flushBatchedUpdates();\n\t } else {\n\t dirtyComponents.length = 0;\n\t }\n\t }\n\t};\n\t\n\tvar UPDATE_QUEUEING = {\n\t initialize: function () {\n\t this.callbackQueue.reset();\n\t },\n\t close: function () {\n\t this.callbackQueue.notifyAll();\n\t }\n\t};\n\t\n\tvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\t\n\tfunction ReactUpdatesFlushTransaction() {\n\t this.reinitializeTransaction();\n\t this.dirtyComponentsLength = null;\n\t this.callbackQueue = CallbackQueue.getPooled();\n\t this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n\t /* useCreateElement */true);\n\t}\n\t\n\t_assign(ReactUpdatesFlushTransaction.prototype, Transaction, {\n\t getTransactionWrappers: function () {\n\t return TRANSACTION_WRAPPERS;\n\t },\n\t\n\t destructor: function () {\n\t this.dirtyComponentsLength = null;\n\t CallbackQueue.release(this.callbackQueue);\n\t this.callbackQueue = null;\n\t ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n\t this.reconcileTransaction = null;\n\t },\n\t\n\t perform: function (method, scope, a) {\n\t // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n\t // with this transaction's wrappers around it.\n\t return Transaction.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n\t }\n\t});\n\t\n\tPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\t\n\tfunction batchedUpdates(callback, a, b, c, d, e) {\n\t ensureInjected();\n\t return batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n\t}\n\t\n\t/**\n\t * Array comparator for ReactComponents by mount ordering.\n\t *\n\t * @param {ReactComponent} c1 first component you're comparing\n\t * @param {ReactComponent} c2 second component you're comparing\n\t * @return {number} Return value usable by Array.prototype.sort().\n\t */\n\tfunction mountOrderComparator(c1, c2) {\n\t return c1._mountOrder - c2._mountOrder;\n\t}\n\t\n\tfunction runBatchedUpdates(transaction) {\n\t var len = transaction.dirtyComponentsLength;\n\t !(len === dirtyComponents.length) ? false ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to match dirty-components array length (%s).', len, dirtyComponents.length) : _prodInvariant('124', len, dirtyComponents.length) : void 0;\n\t\n\t // Since reconciling a component higher in the owner hierarchy usually (not\n\t // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n\t // them before their children by sorting the array.\n\t dirtyComponents.sort(mountOrderComparator);\n\t\n\t // Any updates enqueued while reconciling must be performed after this entire\n\t // batch. Otherwise, if dirtyComponents is [A, B] where A has children B and\n\t // C, B could update twice in a single batch if C's render enqueues an update\n\t // to B (since B would have already updated, we should skip it, and the only\n\t // way we can know to do so is by checking the batch counter).\n\t updateBatchNumber++;\n\t\n\t for (var i = 0; i < len; i++) {\n\t // If a component is unmounted before pending changes apply, it will still\n\t // be here, but we assume that it has cleared its _pendingCallbacks and\n\t // that performUpdateIfNecessary is a noop.\n\t var component = dirtyComponents[i];\n\t\n\t // If performUpdateIfNecessary happens to enqueue any new updates, we\n\t // shouldn't execute the callbacks until the next render happens, so\n\t // stash the callbacks first\n\t var callbacks = component._pendingCallbacks;\n\t component._pendingCallbacks = null;\n\t\n\t var markerName;\n\t if (ReactFeatureFlags.logTopLevelRenders) {\n\t var namedComponent = component;\n\t // Duck type TopLevelWrapper. This is probably always true.\n\t if (component._currentElement.type.isReactTopLevelWrapper) {\n\t namedComponent = component._renderedComponent;\n\t }\n\t markerName = 'React update: ' + namedComponent.getName();\n\t console.time(markerName);\n\t }\n\t\n\t ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction, updateBatchNumber);\n\t\n\t if (markerName) {\n\t console.timeEnd(markerName);\n\t }\n\t\n\t if (callbacks) {\n\t for (var j = 0; j < callbacks.length; j++) {\n\t transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n\t }\n\t }\n\t }\n\t}\n\t\n\tvar flushBatchedUpdates = function () {\n\t // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n\t // array and perform any updates enqueued by mount-ready handlers (i.e.,\n\t // componentDidUpdate) but we need to check here too in order to catch\n\t // updates enqueued by setState callbacks and asap calls.\n\t while (dirtyComponents.length || asapEnqueued) {\n\t if (dirtyComponents.length) {\n\t var transaction = ReactUpdatesFlushTransaction.getPooled();\n\t transaction.perform(runBatchedUpdates, null, transaction);\n\t ReactUpdatesFlushTransaction.release(transaction);\n\t }\n\t\n\t if (asapEnqueued) {\n\t asapEnqueued = false;\n\t var queue = asapCallbackQueue;\n\t asapCallbackQueue = CallbackQueue.getPooled();\n\t queue.notifyAll();\n\t CallbackQueue.release(queue);\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Mark a component as needing a rerender, adding an optional callback to a\n\t * list of functions which will be executed once the rerender occurs.\n\t */\n\tfunction enqueueUpdate(component) {\n\t ensureInjected();\n\t\n\t // Various parts of our code (such as ReactCompositeComponent's\n\t // _renderValidatedComponent) assume that calls to render aren't nested;\n\t // verify that that's the case. (This is called by each top-level update\n\t // function, like setState, forceUpdate, etc.; creation and\n\t // destruction of top-level components is guarded in ReactMount.)\n\t\n\t if (!batchingStrategy.isBatchingUpdates) {\n\t batchingStrategy.batchedUpdates(enqueueUpdate, component);\n\t return;\n\t }\n\t\n\t dirtyComponents.push(component);\n\t if (component._updateBatchNumber == null) {\n\t component._updateBatchNumber = updateBatchNumber + 1;\n\t }\n\t}\n\t\n\t/**\n\t * Enqueue a callback to be run at the end of the current batching cycle. Throws\n\t * if no updates are currently being performed.\n\t */\n\tfunction asap(callback, context) {\n\t invariant(batchingStrategy.isBatchingUpdates, \"ReactUpdates.asap: Can't enqueue an asap callback in a context where\" + 'updates are not being batched.');\n\t asapCallbackQueue.enqueue(callback, context);\n\t asapEnqueued = true;\n\t}\n\t\n\tvar ReactUpdatesInjection = {\n\t injectReconcileTransaction: function (ReconcileTransaction) {\n\t !ReconcileTransaction ? false ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : _prodInvariant('126') : void 0;\n\t ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n\t },\n\t\n\t injectBatchingStrategy: function (_batchingStrategy) {\n\t !_batchingStrategy ? false ? invariant(false, 'ReactUpdates: must provide a batching strategy') : _prodInvariant('127') : void 0;\n\t !(typeof _batchingStrategy.batchedUpdates === 'function') ? false ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : _prodInvariant('128') : void 0;\n\t !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? false ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : _prodInvariant('129') : void 0;\n\t batchingStrategy = _batchingStrategy;\n\t }\n\t};\n\t\n\tvar ReactUpdates = {\n\t /**\n\t * React references `ReactReconcileTransaction` using this property in order\n\t * to allow dependency injection.\n\t *\n\t * @internal\n\t */\n\t ReactReconcileTransaction: null,\n\t\n\t batchedUpdates: batchedUpdates,\n\t enqueueUpdate: enqueueUpdate,\n\t flushBatchedUpdates: flushBatchedUpdates,\n\t injection: ReactUpdatesInjection,\n\t asap: asap\n\t};\n\t\n\tmodule.exports = ReactUpdates;\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar freeGlobal = __webpack_require__(327);\n\t\n\t/** Detect free variable `self`. */\n\tvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\t\n\t/** Used as a reference to the global object. */\n\tvar root = freeGlobal || freeSelf || Function('return this')();\n\t\n\tmodule.exports = root;\n\n\n/***/ },\n/* 37 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Checks if `value` is classified as an `Array` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n\t * @example\n\t *\n\t * _.isArray([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArray(document.body.children);\n\t * // => false\n\t *\n\t * _.isArray('abc');\n\t * // => false\n\t *\n\t * _.isArray(_.noop);\n\t * // => false\n\t */\n\tvar isArray = Array.isArray;\n\t\n\tmodule.exports = isArray;\n\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar _assign = __webpack_require__(18);\n\t\n\tvar PooledClass = __webpack_require__(49);\n\t\n\tvar emptyFunction = __webpack_require__(28);\n\tvar warning = __webpack_require__(14);\n\t\n\tvar didWarnForAddedNewProperty = false;\n\tvar isProxySupported = typeof Proxy === 'function';\n\t\n\tvar shouldBeReleasedProperties = ['dispatchConfig', '_targetInst', 'nativeEvent', 'isDefaultPrevented', 'isPropagationStopped', '_dispatchListeners', '_dispatchInstances'];\n\t\n\t/**\n\t * @interface Event\n\t * @see http://www.w3.org/TR/DOM-Level-3-Events/\n\t */\n\tvar EventInterface = {\n\t type: null,\n\t target: null,\n\t // currentTarget is set when dispatching; no use in copying it here\n\t currentTarget: emptyFunction.thatReturnsNull,\n\t eventPhase: null,\n\t bubbles: null,\n\t cancelable: null,\n\t timeStamp: function (event) {\n\t return event.timeStamp || Date.now();\n\t },\n\t defaultPrevented: null,\n\t isTrusted: null\n\t};\n\t\n\t/**\n\t * Synthetic events are dispatched by event plugins, typically in response to a\n\t * top-level event delegation handler.\n\t *\n\t * These systems should generally use pooling to reduce the frequency of garbage\n\t * collection. The system should check `isPersistent` to determine whether the\n\t * event should be released into the pool after being dispatched. Users that\n\t * need a persisted event should invoke `persist`.\n\t *\n\t * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n\t * normalizing browser quirks. Subclasses do not necessarily have to implement a\n\t * DOM interface; custom application-specific events can also subclass this.\n\t *\n\t * @param {object} dispatchConfig Configuration used to dispatch this event.\n\t * @param {*} targetInst Marker identifying the event target.\n\t * @param {object} nativeEvent Native browser event.\n\t * @param {DOMEventTarget} nativeEventTarget Target node.\n\t */\n\tfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n\t if (false) {\n\t // these have a getter/setter for warnings\n\t delete this.nativeEvent;\n\t delete this.preventDefault;\n\t delete this.stopPropagation;\n\t }\n\t\n\t this.dispatchConfig = dispatchConfig;\n\t this._targetInst = targetInst;\n\t this.nativeEvent = nativeEvent;\n\t\n\t var Interface = this.constructor.Interface;\n\t for (var propName in Interface) {\n\t if (!Interface.hasOwnProperty(propName)) {\n\t continue;\n\t }\n\t if (false) {\n\t delete this[propName]; // this has a getter/setter for warnings\n\t }\n\t var normalize = Interface[propName];\n\t if (normalize) {\n\t this[propName] = normalize(nativeEvent);\n\t } else {\n\t if (propName === 'target') {\n\t this.target = nativeEventTarget;\n\t } else {\n\t this[propName] = nativeEvent[propName];\n\t }\n\t }\n\t }\n\t\n\t var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n\t if (defaultPrevented) {\n\t this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n\t } else {\n\t this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n\t }\n\t this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n\t return this;\n\t}\n\t\n\t_assign(SyntheticEvent.prototype, {\n\t preventDefault: function () {\n\t this.defaultPrevented = true;\n\t var event = this.nativeEvent;\n\t if (!event) {\n\t return;\n\t }\n\t\n\t if (event.preventDefault) {\n\t event.preventDefault();\n\t // eslint-disable-next-line valid-typeof\n\t } else if (typeof event.returnValue !== 'unknown') {\n\t event.returnValue = false;\n\t }\n\t this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n\t },\n\t\n\t stopPropagation: function () {\n\t var event = this.nativeEvent;\n\t if (!event) {\n\t return;\n\t }\n\t\n\t if (event.stopPropagation) {\n\t event.stopPropagation();\n\t // eslint-disable-next-line valid-typeof\n\t } else if (typeof event.cancelBubble !== 'unknown') {\n\t // The ChangeEventPlugin registers a \"propertychange\" event for\n\t // IE. This event does not support bubbling or cancelling, and\n\t // any references to cancelBubble throw \"Member not found\". A\n\t // typeof check of \"unknown\" circumvents this issue (and is also\n\t // IE specific).\n\t event.cancelBubble = true;\n\t }\n\t\n\t this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n\t },\n\t\n\t /**\n\t * We release all dispatched `SyntheticEvent`s after each event loop, adding\n\t * them back into the pool. This allows a way to hold onto a reference that\n\t * won't be added back into the pool.\n\t */\n\t persist: function () {\n\t this.isPersistent = emptyFunction.thatReturnsTrue;\n\t },\n\t\n\t /**\n\t * Checks if this event should be released back into the pool.\n\t *\n\t * @return {boolean} True if this should not be released, false otherwise.\n\t */\n\t isPersistent: emptyFunction.thatReturnsFalse,\n\t\n\t /**\n\t * `PooledClass` looks for `destructor` on each instance it releases.\n\t */\n\t destructor: function () {\n\t var Interface = this.constructor.Interface;\n\t for (var propName in Interface) {\n\t if (false) {\n\t Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n\t } else {\n\t this[propName] = null;\n\t }\n\t }\n\t for (var i = 0; i < shouldBeReleasedProperties.length; i++) {\n\t this[shouldBeReleasedProperties[i]] = null;\n\t }\n\t if (false) {\n\t Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n\t Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', emptyFunction));\n\t Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', emptyFunction));\n\t }\n\t }\n\t});\n\t\n\tSyntheticEvent.Interface = EventInterface;\n\t\n\t/**\n\t * Helper to reduce boilerplate when creating subclasses.\n\t *\n\t * @param {function} Class\n\t * @param {?object} Interface\n\t */\n\tSyntheticEvent.augmentClass = function (Class, Interface) {\n\t var Super = this;\n\t\n\t var E = function () {};\n\t E.prototype = Super.prototype;\n\t var prototype = new E();\n\t\n\t _assign(prototype, Class.prototype);\n\t Class.prototype = prototype;\n\t Class.prototype.constructor = Class;\n\t\n\t Class.Interface = _assign({}, Super.Interface, Interface);\n\t Class.augmentClass = Super.augmentClass;\n\t\n\t PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n\t};\n\t\n\t/** Proxying after everything set on SyntheticEvent\n\t * to resolve Proxy issue on some WebKit browsers\n\t * in which some Event properties are set to undefined (GH#10010)\n\t */\n\tif (false) {\n\t if (isProxySupported) {\n\t /*eslint-disable no-func-assign */\n\t SyntheticEvent = new Proxy(SyntheticEvent, {\n\t construct: function (target, args) {\n\t return this.apply(target, Object.create(target.prototype), args);\n\t },\n\t apply: function (constructor, that, args) {\n\t return new Proxy(constructor.apply(that, args), {\n\t set: function (target, prop, value) {\n\t if (prop !== 'isPersistent' && !target.constructor.Interface.hasOwnProperty(prop) && shouldBeReleasedProperties.indexOf(prop) === -1) {\n\t process.env.NODE_ENV !== 'production' ? warning(didWarnForAddedNewProperty || target.isPersistent(), \"This synthetic event is reused for performance reasons. If you're \" + \"seeing this, you're adding a new property in the synthetic event object. \" + 'The property is never released. See ' + 'https://fb.me/react-event-pooling for more information.') : void 0;\n\t didWarnForAddedNewProperty = true;\n\t }\n\t target[prop] = value;\n\t return true;\n\t }\n\t });\n\t }\n\t });\n\t /*eslint-enable no-func-assign */\n\t }\n\t}\n\t\n\tPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\t\n\tmodule.exports = SyntheticEvent;\n\t\n\t/**\n\t * Helper to nullify syntheticEvent instance properties when destructing\n\t *\n\t * @param {object} SyntheticEvent\n\t * @param {String} propName\n\t * @return {object} defineProperty object\n\t */\n\tfunction getPooledWarningPropertyDefinition(propName, getVal) {\n\t var isFunction = typeof getVal === 'function';\n\t return {\n\t configurable: true,\n\t set: set,\n\t get: get\n\t };\n\t\n\t function set(val) {\n\t var action = isFunction ? 'setting the method' : 'setting the property';\n\t warn(action, 'This is effectively a no-op');\n\t return val;\n\t }\n\t\n\t function get() {\n\t var action = isFunction ? 'accessing the method' : 'accessing the property';\n\t var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n\t warn(action, result);\n\t return getVal;\n\t }\n\t\n\t function warn(action, result) {\n\t var warningCondition = false;\n\t false ? warning(warningCondition, \"This synthetic event is reused for performance reasons. If you're seeing this, \" + \"you're %s `%s` on a released/nullified synthetic event. %s. \" + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result) : void 0;\n\t }\n\t}\n\n/***/ },\n/* 39 */\n/***/ function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t * \n\t */\n\t\n\t'use strict';\n\t\n\t/**\n\t * Keeps track of the current owner.\n\t *\n\t * The current owner is the component who should own any components that are\n\t * currently being constructed.\n\t */\n\tvar ReactCurrentOwner = {\n\t /**\n\t * @internal\n\t * @type {ReactComponent}\n\t */\n\t current: null\n\t};\n\t\n\tmodule.exports = ReactCurrentOwner;\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = {};\n\tmodule.exports.Arc = __webpack_require__(583);\n\tmodule.exports.Line = __webpack_require__(584);\n\tmodule.exports.Point = __webpack_require__(585);\n\tmodule.exports.Rectangle = __webpack_require__(586);\n\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global = __webpack_require__(42);\n\tvar core = __webpack_require__(25);\n\tvar ctx = __webpack_require__(115);\n\tvar hide = __webpack_require__(54);\n\tvar PROTOTYPE = 'prototype';\n\t\n\tvar $export = function (type, name, source) {\n\t var IS_FORCED = type & $export.F;\n\t var IS_GLOBAL = type & $export.G;\n\t var IS_STATIC = type & $export.S;\n\t var IS_PROTO = type & $export.P;\n\t var IS_BIND = type & $export.B;\n\t var IS_WRAP = type & $export.W;\n\t var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n\t var expProto = exports[PROTOTYPE];\n\t var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n\t var key, own, out;\n\t if (IS_GLOBAL) source = name;\n\t for (key in source) {\n\t // contains in native\n\t own = !IS_FORCED && target && target[key] !== undefined;\n\t if (own && key in exports) continue;\n\t // export native or passed\n\t out = own ? target[key] : source[key];\n\t // prevent global pollution for namespaces\n\t exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n\t // bind timers to global for call from export context\n\t : IS_BIND && own ? ctx(out, global)\n\t // wrap global constructors for prevent change them in library\n\t : IS_WRAP && target[key] == out ? (function (C) {\n\t var F = function (a, b, c) {\n\t if (this instanceof C) {\n\t switch (arguments.length) {\n\t case 0: return new C();\n\t case 1: return new C(a);\n\t case 2: return new C(a, b);\n\t } return new C(a, b, c);\n\t } return C.apply(this, arguments);\n\t };\n\t F[PROTOTYPE] = C[PROTOTYPE];\n\t return F;\n\t // make static versions for prototype methods\n\t })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n\t // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n\t if (IS_PROTO) {\n\t (exports.virtual || (exports.virtual = {}))[key] = out;\n\t // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n\t if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n\t }\n\t }\n\t};\n\t// type bitmap\n\t$export.F = 1; // forced\n\t$export.G = 2; // global\n\t$export.S = 4; // static\n\t$export.P = 8; // proto\n\t$export.B = 16; // bind\n\t$export.W = 32; // wrap\n\t$export.U = 64; // safe\n\t$export.R = 128; // real proto method for `library`\n\tmodule.exports = $export;\n\n\n/***/ },\n/* 42 */\n/***/ function(module, exports) {\n\n\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\tvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n\t ? window : typeof self != 'undefined' && self.Math == Math ? self\n\t // eslint-disable-next-line no-new-func\n\t : Function('return this')();\n\tif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar isObject = __webpack_require__(55);\n\tmodule.exports = function (it) {\n\t if (!isObject(it)) throw TypeError(it + ' is not an object!');\n\t return it;\n\t};\n\n\n/***/ },\n/* 45 */\n/***/ function(module, exports) {\n\n\tvar hasOwnProperty = {}.hasOwnProperty;\n\tmodule.exports = function (it, key) {\n\t return hasOwnProperty.call(it, key);\n\t};\n\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar anObject = __webpack_require__(44);\n\tvar IE8_DOM_DEFINE = __webpack_require__(297);\n\tvar toPrimitive = __webpack_require__(126);\n\tvar dP = Object.defineProperty;\n\t\n\texports.f = __webpack_require__(53) ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n\t anObject(O);\n\t P = toPrimitive(P, true);\n\t anObject(Attributes);\n\t if (IE8_DOM_DEFINE) try {\n\t return dP(O, P, Attributes);\n\t } catch (e) { /* empty */ }\n\t if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n\t if ('value' in Attributes) O[P] = Attributes.value;\n\t return O;\n\t};\n\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// to indexed object, toObject with fallback for non-array-like ES3 strings\n\tvar IObject = __webpack_require__(298);\n\tvar defined = __webpack_require__(116);\n\tmodule.exports = function (it) {\n\t return IObject(defined(it));\n\t};\n\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar baseIsNative = __webpack_require__(717),\n\t getValue = __webpack_require__(741);\n\t\n\t/**\n\t * Gets the native function at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the method to get.\n\t * @returns {*} Returns the function if it's native, else `undefined`.\n\t */\n\tfunction getNative(object, key) {\n\t var value = getValue(object, key);\n\t return baseIsNative(value) ? value : undefined;\n\t}\n\t\n\tmodule.exports = getNative;\n\n\n/***/ },\n/* 49 */\n[990, 15],\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(517);\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\t\n\tvar _react = __webpack_require__(1);\n\t\n\tvar _react2 = _interopRequireDefault(_react);\n\t\n\t__webpack_require__(676);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\t\n\tfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\t\n\tfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\t\n\tvar Spinner = function (_React$Component) {\n\t _inherits(Spinner, _React$Component);\n\t\n\t function Spinner() {\n\t _classCallCheck(this, Spinner);\n\t\n\t return _possibleConstructorReturn(this, (Spinner.__proto__ || Object.getPrototypeOf(Spinner)).apply(this, arguments));\n\t }\n\t\n\t _createClass(Spinner, [{\n\t key: 'render',\n\t value: function render() {\n\t return _react2.default.createElement(\n\t 'div',\n\t null,\n\t _react2.default.createElement('img', { className: 'spinner', src: '/images/spinner.gif', role: 'presentation' })\n\t );\n\t }\n\t }]);\n\t\n\t return Spinner;\n\t}(_react2.default.Component);\n\t\n\texports.default = Spinner;\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(613), __esModule: true };\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// Thank's IE8 for his funny defineProperty\n\tmodule.exports = !__webpack_require__(66)(function () {\n\t return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n\t});\n\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar dP = __webpack_require__(46);\n\tvar createDesc = __webpack_require__(69);\n\tmodule.exports = __webpack_require__(53) ? function (object, key, value) {\n\t return dP.f(object, key, createDesc(1, value));\n\t} : function (object, key, value) {\n\t object[key] = value;\n\t return object;\n\t};\n\n\n/***/ },\n/* 55 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function (it) {\n\t return typeof it === 'object' ? it !== null : typeof it === 'function';\n\t};\n\n\n/***/ },\n/* 56 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {};\n\n\n/***/ },\n/* 57 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\texports.default = ownerDocument;\n\tfunction ownerDocument(node) {\n\t return node && node.ownerDocument || document;\n\t}\n\tmodule.exports = exports[\"default\"];\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t value: true\n\t});\n\t\n\tvar _inDOM = __webpack_require__(43);\n\t\n\tvar _inDOM2 = _interopRequireDefault(_inDOM);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function () {\n\t // HTML DOM and SVG DOM may have different support levels,\n\t // so we need to check on context instead of a document root element.\n\t return _inDOM2.default ? function (context, node) {\n\t if (context.contains) {\n\t return context.contains(node);\n\t } else if (context.compareDocumentPosition) {\n\t return context === node || !!(context.compareDocumentPosition(node) & 16);\n\t } else {\n\t return fallback(context, node);\n\t }\n\t } : fallback;\n\t}();\n\t\n\tfunction fallback(context, node) {\n\t if (node) do {\n\t if (node === context) return true;\n\t } while (node = node.parentNode);\n\t\n\t return false;\n\t}\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 59 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\texports.__esModule = true;\n\tvar addLeadingSlash = exports.addLeadingSlash = function addLeadingSlash(path) {\n\t return path.charAt(0) === '/' ? path : '/' + path;\n\t};\n\t\n\tvar stripLeadingSlash = exports.stripLeadingSlash = function stripLeadingSlash(path) {\n\t return path.charAt(0) === '/' ? path.substr(1) : path;\n\t};\n\t\n\tvar hasBasename = exports.hasBasename = function hasBasename(path, prefix) {\n\t return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n\t};\n\t\n\tvar stripBasename = exports.stripBasename = function stripBasename(path, prefix) {\n\t return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n\t};\n\t\n\tvar stripTrailingSlash = exports.stripTrailingSlash = function stripTrailingSlash(path) {\n\t return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n\t};\n\t\n\tvar parsePath = exports.parsePath = function parsePath(path) {\n\t var pathname = path || '/';\n\t var search = '';\n\t var hash = '';\n\t\n\t var hashIndex = pathname.indexOf('#');\n\t if (hashIndex !== -1) {\n\t hash = pathname.substr(hashIndex);\n\t pathname = pathname.substr(0, hashIndex);\n\t }\n\t\n\t var searchIndex = pathname.indexOf('?');\n\t if (searchIndex !== -1) {\n\t search = pathname.substr(searchIndex);\n\t pathname = pathname.substr(0, searchIndex);\n\t }\n\t\n\t return {\n\t pathname: pathname,\n\t search: search === '?' ? '' : search,\n\t hash: hash === '#' ? '' : hash\n\t };\n\t};\n\t\n\tvar createPath = exports.createPath = function createPath(location) {\n\t var pathname = location.pathname,\n\t search = location.search,\n\t hash = location.hash;\n\t\n\t\n\t var path = pathname || '/';\n\t\n\t if (search && search !== '?') path += search.charAt(0) === '?' ? search : '?' + search;\n\t\n\t if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : '#' + hash;\n\t\n\t return path;\n\t};\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright (c) 2015-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t *\n\t */\n\t\n\t'use strict';\n\t\n\tvar DOMNamespaces = __webpack_require__(148);\n\tvar setInnerHTML = __webpack_require__(104);\n\t\n\tvar createMicrosoftUnsafeLocalFunction = __webpack_require__(156);\n\tvar setTextContent = __webpack_require__(497);\n\t\n\tvar ELEMENT_NODE_TYPE = 1;\n\tvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\t\n\t/**\n\t * In IE (8-11) and Edge, appending nodes with no children is dramatically\n\t * faster than appending a full subtree, so we essentially queue up the\n\t * .appendChild calls here and apply them so each node is added to its parent\n\t * before any children are added.\n\t *\n\t * In other browsers, doing so is slower or neutral compared to the other order\n\t * (in Firefox, twice as slow) so we only do this inversion in IE.\n\t *\n\t * See https://github.com/spicyj/innerhtml-vs-createelement-vs-clonenode.\n\t */\n\tvar enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\\bEdge\\/\\d/.test(navigator.userAgent);\n\t\n\tfunction insertTreeChildren(tree) {\n\t if (!enableLazy) {\n\t return;\n\t }\n\t var node = tree.node;\n\t var children = tree.children;\n\t if (children.length) {\n\t for (var i = 0; i < children.length; i++) {\n\t insertTreeBefore(node, children[i], null);\n\t }\n\t } else if (tree.html != null) {\n\t setInnerHTML(node, tree.html);\n\t } else if (tree.text != null) {\n\t setTextContent(node, tree.text);\n\t }\n\t}\n\t\n\tvar insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) {\n\t // DocumentFragments aren't actually part of the DOM after insertion so\n\t // appending children won't update the DOM. We need to ensure the fragment\n\t // is properly populated first, breaking out of our lazy approach for just\n\t // this level. Also, some