{"ast":null,"code":"//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.moment = factory();\n})(this, function () {\n 'use strict';\n\n var hookCallback;\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n function isArray(input) {\n return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n }\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return input != null && Object.prototype.toString.call(input) === '[object Object]';\n }\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n function isUndefined(input) {\n return input === void 0;\n }\n function isNumber(input) {\n return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n }\n function isDate(input) {\n return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n }\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n return a;\n }\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false\n };\n }\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n return false;\n };\n }\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\n if (m._strict) {\n isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = hooks.momentProperties = [],\n updateInProgress = false;\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n function isMoment(obj) {\n return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\n }\n function warn(msg) {\n if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n function deprecate(msg, fn) {\n var firstTime = true;\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + new Error().stack);\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n var deprecations = {};\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n function isFunction(input) {\n return typeof Function !== 'undefined' && input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n }\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\\d{1,2}/.source);\n }\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n var keys;\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L'\n };\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n }\n var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(func.apply(this, arguments), token);\n };\n }\n }\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n format = expandFormat(format, m.localeData());\n formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n return formatFunctions[format](m);\n }\n function expandFormat(format, locale) {\n var i = 5;\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n return format;\n }\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A'\n };\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n if (format || !formatUpper) {\n return format;\n }\n this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function (tok) {\n if (tok === 'MMMM' || tok === 'MM' || tok === 'DD' || tok === 'dddd') {\n return tok.slice(1);\n }\n return tok;\n }).join('');\n return this._longDateFormat[key];\n }\n var defaultInvalidDate = 'Invalid date';\n function invalidDate() {\n return this._invalidDate;\n }\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years'\n };\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\n }\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n var aliases = {};\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n function normalizeUnits(units) {\n return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n }\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n return normalizedInput;\n }\n var priorities = {};\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({\n unit: u,\n priority: priorities[u]\n });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n function isLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n }\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n return value;\n }\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n function get(mom, unit) {\n return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n }\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n var match1 = /\\d/,\n // 0 - 9\n match2 = /\\d\\d/,\n // 00 - 99\n match3 = /\\d{3}/,\n // 000 - 999\n match4 = /\\d{4}/,\n // 0000 - 9999\n match6 = /[+-]?\\d{6}/,\n // -999999 - 999999\n match1to2 = /\\d\\d?/,\n // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/,\n // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/,\n // 99999 - 999999\n match1to3 = /\\d{1,3}/,\n // 0 - 999\n match1to4 = /\\d{1,4}/,\n // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/,\n // -999999 - 999999\n matchUnsigned = /\\d+/,\n // 0 - inf\n matchSigned = /[+-]?\\d+/,\n // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi,\n // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi,\n // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/,\n // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n 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 regexes;\n regexes = {};\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }));\n }\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n var tokens = {};\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n function mod(n, x) {\n return (n % x + x) % x;\n }\n var indexOf;\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months) ? this._months : this._months['standalone'];\n }\n return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n }\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n }\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n }\n if (!strict && !this._monthsParse[i]) {\n regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n return i;\n } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;\n }\n }\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;\n }\n }\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n return date;\n }\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var\n // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n return {\n year: resYear,\n dayOfYear: resDayOfYear\n };\n }\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n return {\n week: resWeek,\n year: resYear\n };\n }\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n });\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n var defaultLocaleWeek = {\n dow: 0,\n // Sunday is the first day of the week.\n doy: 6 // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n return null;\n }\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];\n return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\n }\n function localeWeekdaysShort(m) {\n return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n }\n function localeWeekdaysMin(m) {\n return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n }\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n }\n if (!this._weekdaysParse[i]) {\n regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;\n }\n }\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n }\n }\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n }\n }\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n function kFormat() {\n return this.hours() || 24;\n }\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n addFormatToken('hmmss', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n addFormatToken('Hmmss', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n });\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n });\n }\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n week: defaultLocaleWeek,\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n meridiemParse: defaultLocaleMeridiemParse\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // 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 function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (next && next.length >= j && commonPrefix(split, next) >= j - 1) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (locales[name] === undefined && typeof module !== 'undefined' && module && module.exports && isLocaleNameSane(name)) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n }\n }\n }\n return globalLocale._abbr;\n }\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n if (!key) {\n return globalLocale;\n }\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n return chooseLocale(key);\n }\n function listLocales() {\n return keys(locales);\n }\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n if (a && getParsingFlags(m).overflow === -2) {\n overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\n if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n getParsingFlags(m).overflow = overflow;\n }\n return m;\n }\n\n // iso 8601 regex\n // 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 var 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 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 tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/], ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/], ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/], ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false], ['YYYY-DDD', /\\d{4}-\\d{3}/], ['YYYY-MM', /\\d{4}-\\d\\d/, false], ['YYYYYYMMDD', /[+-]\\d{10}/], ['YYYYMMDD', /\\d{8}/], ['GGGG[W]WWE', /\\d{4}W\\d{3}/], ['GGGG[W]WW', /\\d{4}W\\d{2}/, false], ['YYYYDDD', /\\d{7}/], ['YYYYMM', /\\d{6}/, false], ['YYYY', /\\d{4}/, false]],\n // iso time formats and regexes\n isoTimes = [['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/], ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/], ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/], ['HH:mm', /\\d\\d:\\d\\d/], ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/], ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/], ['HHmmss', /\\d\\d\\d\\d\\d\\d/], ['HHmm', /\\d\\d\\d\\d/], ['HH', /\\d\\d/]],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n 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 obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n return result;\n }\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s.replace(/\\([^()]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n }\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n });\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n if (config._d) {\n return;\n }\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n curWeek = weekOfYear(createLocal(), dow, doy);\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\n getParsingFlags(config).bigHour = undefined;\n }\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n configFromArray(config);\n checkOverflow(config);\n }\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n getParsingFlags(tempConfig).score = currentScore;\n if (!bestFormatIsValid) {\n if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n extend(config, bestMoment || tempConfig);\n }\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map([i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n return obj && parseInt(obj, 10);\n });\n configFromArray(config);\n }\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n return res;\n }\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n config._locale = config._locale || getLocale(config._l);\n if (input === null || format === undefined && input === '') {\n return createInvalid({\n nullInput: true\n });\n }\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n if (!isValid(config)) {\n config._d = null;\n }\n return config;\n }\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n return createFromConfig(c);\n }\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }),\n prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n });\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n return pickBy('isBefore', args);\n }\n function max() {\n var args = [].slice.call(arguments, 0);\n return pickBy('isAfter', args);\n }\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (hasOwnProp(m, key) && !(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n return false;\n }\n }\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n return true;\n }\n function isValid$1() {\n return this._isValid;\n }\n function createInvalid$1() {\n return createDuration(NaN);\n }\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds = +milliseconds + seconds * 1e3 +\n // 1000\n minutes * 6e4 +\n // 1000 * 60\n 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 // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n this._data = {};\n this._locale = getLocale();\n this._bubble();\n }\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);\n });\n }\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n if (matches === null) {\n return null;\n }\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n this.utcOffset(input, keepLocalTime);\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n return (this.utcOffset() - input) % 60 === 0;\n }\n function isDaylightSavingTime() {\n return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n }\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n var c = {},\n other;\n copyConfig(c, this);\n c = prepareConfig(c);\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n return this._isDSTShifted;\n }\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n 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 function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if (match = aspNetRegex.exec(input)) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n };\n } else if (match = isoRegex.exec(input)) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign)\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n ret = new Duration(duration);\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n return ret;\n }\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n function positiveMomentsDifference(base, other) {\n var res = {};\n res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n return res;\n }\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return {\n milliseconds: 0,\n months: 0\n };\n }\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n tmp = val;\n val = period;\n period = tmp;\n }\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n if (!mom.isValid()) {\n // No op\n return;\n }\n updateOffset = updateOffset == null ? true : updateOffset;\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === undefined;\n }\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = ['years', 'year', 'y', 'months', 'month', 'M', 'days', 'day', 'd', 'dates', 'date', 'D', 'hours', 'hour', 'h', 'minutes', 'minute', 'm', 'seconds', 'second', 's', 'milliseconds', 'millisecond', 'ms'],\n i,\n property,\n propertyLen = properties.length;\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n return objectTest && propertyTest;\n }\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest = input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = ['sameDay', 'nextDay', 'lastDay', 'nextWeek', 'lastWeek', 'sameElse'],\n i,\n property;\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n return objectTest && propertyTest;\n }\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';\n }\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n }\n function clone() {\n return new Moment(this);\n }\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n }\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n }\n }\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n if (!this.isValid()) {\n return NaN;\n }\n that = cloneWithOffset(input, this);\n if (!that.isValid()) {\n return NaN;\n }\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n units = normalizeUnits(units);\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break;\n // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break;\n // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break;\n // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break;\n // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break;\n // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n return asFloat ? output : absFloor(output);\n }\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n return this.format(prefix + year + datetime + suffix);\n }\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n function from(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n to: this,\n from: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n function to(time, withoutSuffix) {\n if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n return createDuration({\n from: this,\n to: time\n }).locale(this.locale()).humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n });\n function localeData() {\n return this._locale;\n }\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return (dividend % divisor + divisor) % divisor;\n }\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n break;\n case 'isoWeek':\n time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n function toDate() {\n return new Date(this.valueOf());\n }\n function toArray() {\n var m = this;\n return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n }\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds()\n };\n }\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n function isValid$2() {\n return isValid(this);\n }\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict\n };\n }\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n });\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n return '';\n }\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n return '';\n }\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n return '';\n }\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n if (eras[i].since <= val && val <= eras[i].until || eras[i].until <= val && val <= eras[i].since) {\n return (this.year() - hooks(eras[i].since).year()) * dir + eras[i].offset;\n }\n }\n return this.year();\n }\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp('^(' + narrowPieces.join('|') + ')', 'i');\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n });\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);\n }\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);\n }\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;\n });\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n var proto = Moment.prototype;\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n function preParsePostFormat(string) {\n return string;\n }\n var proto$1 = Locale.prototype;\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n format = format || '';\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n format = format || '';\n }\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n getSetGlobalLocale('en', {\n eras: [{\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD'\n }, {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC'\n }],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n return number + output;\n }\n });\n\n // Side effect imports\n\n hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n var mathAbs = Math.abs;\n function abs() {\n var data = this._data;\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n return this;\n }\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n data.days = days;\n data.months = months;\n data.years = years;\n return this;\n }\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return days * 4800 / 146097;\n }\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return months * 146097 / 4800;\n }\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n units = normalizeUnits(units);\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;\n }\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n function clone$1() {\n return createDuration(this);\n }\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n function weeks() {\n return absFloor(this.days() / 7);\n }\n var round = Math.round,\n thresholds = {\n ss: 44,\n // a few seconds to seconds\n s: 45,\n // seconds to minute\n m: 45,\n // minutes to hour\n h: 22,\n // hours to day\n d: 26,\n // days to month/week\n w: null,\n // weeks to month\n M: 11 // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days];\n if (thresholds.w != null) {\n a = a || weeks <= 1 && ['w'] || weeks < thresholds.w && ['ww', weeks];\n }\n a = a || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n return locale.postformat(output);\n }\n var abs$1 = Math.abs;\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n return totalSign + 'P' + (years ? ymSign + years + 'Y' : '') + (months ? ymSign + months + 'M' : '') + (days ? daysSign + days + 'D' : '') + (hours || minutes || seconds ? 'T' : '') + (hours ? hmsSign + hours + 'H' : '') + (minutes ? hmsSign + minutes + 'M' : '') + (seconds ? hmsSign + s + 'S' : '');\n }\n var proto$2 = Duration.prototype;\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n setHookCallback(createLocal);\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',\n // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',\n // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',\n // \n DATE: 'YYYY-MM-DD',\n // \n TIME: 'HH:mm',\n // \n TIME_SECONDS: 'HH:mm:ss',\n // \n TIME_MS: 'HH:mm:ss.SSS',\n // \n WEEK: 'GGGG-[W]WW',\n // \n MONTH: 'YYYY-MM' // \n };\n\n return hooks;\n});","map":{"version":3,"names":["global","factory","exports","module","define","amd","moment","hookCallback","hooks","apply","arguments","setHookCallback","callback","isArray","input","Array","Object","prototype","toString","call","isObject","hasOwnProp","a","b","hasOwnProperty","isObjectEmpty","obj","getOwnPropertyNames","length","k","isUndefined","isNumber","isDate","Date","map","arr","fn","res","i","arrLen","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","m","_pf","some","fun","t","len","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","undefined","isFrozen","createInvalid","NaN","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","args","arg","key","argLen","slice","join","Error","stack","deprecations","deprecateSimple","name","isFunction","Function","set","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","source","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","keys","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","now","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","sign","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","localeData","removeFormattingTokens","match","replace","makeFormatFunction","array","formatMoment","invalidDate","expandFormat","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","toUpperCase","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","s","ss","mm","h","hh","d","dd","w","ww","M","MM","y","yy","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedInput","normalizedProp","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","u","sort","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","makeGetSet","keepTime","set$1","get","month","date","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","n","x","indexOf","o","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","min","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","parseTwoDigitYear","parseInt","daysInYear","getSetYear","getIsLeapYear","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","fwdlw","getUTCDay","dayOfYearFromWeeks","week","weekday","localWeekday","weekOffset","dayOfYear","resYear","resDayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","concat","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minPieces","minp","shortp","longp","hFormat","hours","kFormat","minutes","seconds","lowercase","matchMeridiem","_meridiemParse","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","localeIsPM","charAt","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","globalLocale","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","j","next","loadLocale","isLocaleNameSane","oldLocale","aliasedRequire","_abbr","require","getSetGlobalLocale","e","values","data","getLocale","defineLocale","abbr","parentLocale","forEach","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","l","exec","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","_useUTC","defaults","c","currentDateArray","nowValue","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","utcOffset","offsetFromString","chunkOffset","matcher","matches","chunk","parts","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","invalid","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","dur","tmp","isAdding","isString","String","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","properties","property","propertyLen","arrayTest","dataTypeTest","filter","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","anchor2","adjust","defaultFormat","defaultFormatUtc","toISOString","keepOffset","toDate","inspect","zone","prefix","datetime","suffix","inputString","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","matchEraAbbr","matchEraName","matchEraNarrow","erasParse","matchEraYearOrdinal","_eraYearOrdinalRegex","eraYearOrdinalParse","localeEras","eras","_eras","since","until","Infinity","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","abbrPieces","namePieces","narrowPieces","isoWeekYear","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetSecond","getSetMillisecond","parseMs","getZoneAbbr","getZoneName","proto","Symbol","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseZone","isDST","zoneAbbr","zoneName","dates","isDSTShifted","createUnix","createInZone","preParsePostFormat","proto$1","firstDayOfYear","firstDayOfWeek","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","argWithSuffix","argThresholds","withSuffix","th","assign","abs$1","toISOString$1","total","totalSign","ymSign","daysSign","hmsSign","toFixed","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS"],"sources":["C:/Users/eudes.inacio/GabineteDigital/gabinete-digital-fo/node_modules/moment/moment.js"],"sourcesContent":["//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n if (m._isValid == null) {\n var flags = getParsingFlags(m),\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n }),\n isNowValid =\n !isNaN(m._d.getTime()) &&\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {};\n\n function addUnitAlias(unit, shorthand) {\n var lowerCase = unit.toLowerCase();\n aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n }\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {};\n\n function addUnitPriority(unit, priority) {\n priorities[unit] = priority;\n }\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n return mom.isValid()\n ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n : NaN;\n }\n\n function set$1(mom, unit, value) {\n if (mom.isValid() && !isNaN(value)) {\n if (\n unit === 'FullYear' &&\n isLeapYear(mom.year()) &&\n mom.month() === 1 &&\n mom.date() === 29\n ) {\n value = toInt(value);\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n value,\n mom.month(),\n daysInMonth(value, mom.month())\n );\n } else {\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n }\n }\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[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 regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // ALIASES\n\n addUnitAlias('month', 'M');\n\n // PRIORITY\n\n addUnitPriority('month', 8);\n\n // PARSING\n\n addRegexToken('M', match1to2);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n var dayOfMonth;\n\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortPieces.push(this.monthsShort(mom, ''));\n longPieces.push(this.months(mom, ''));\n mixedPieces.push(this.months(mom, ''));\n mixedPieces.push(this.monthsShort(mom, ''));\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n for (i = 0; i < 12; i++) {\n shortPieces[i] = regexEscape(shortPieces[i]);\n longPieces[i] = regexEscape(longPieces[i]);\n }\n for (i = 0; i < 24; i++) {\n mixedPieces[i] = regexEscape(mixedPieces[i]);\n }\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // ALIASES\n\n addUnitAlias('year', 'y');\n\n // PRIORITIES\n\n addUnitPriority('year', 1);\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // ALIASES\n\n addUnitAlias('week', 'w');\n addUnitAlias('isoWeek', 'W');\n\n // PRIORITIES\n\n addUnitPriority('week', 5);\n addUnitPriority('isoWeek', 5);\n\n // PARSING\n\n addRegexToken('w', match1to2);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // ALIASES\n\n addUnitAlias('day', 'd');\n addUnitAlias('weekday', 'e');\n addUnitAlias('isoWeekday', 'E');\n\n // PRIORITY\n addUnitPriority('day', 11);\n addUnitPriority('weekday', 11);\n addUnitPriority('isoWeekday', 11);\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // ALIASES\n\n addUnitAlias('hour', 'h');\n\n // PRIORITY\n addUnitPriority('hour', 13);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2);\n addRegexToken('h', match1to2);\n addRegexToken('k', match1to2);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // 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 function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n return name.match('^[^/\\\\\\\\]*$') != null;\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 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 var extendedIsoRegex =\n /^\\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 basicIsoRegex =\n /^\\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 tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(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 obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n 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 // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n namePieces.push(regexEscape(eras[i].name));\n abbrPieces.push(regexEscape(eras[i].abbr));\n narrowPieces.push(regexEscape(eras[i].narrow));\n\n mixedPieces.push(regexEscape(eras[i].name));\n mixedPieces.push(regexEscape(eras[i].abbr));\n mixedPieces.push(regexEscape(eras[i].narrow));\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n addUnitAlias('weekYear', 'gg');\n addUnitAlias('isoWeekYear', 'GG');\n\n // PRIORITY\n\n addUnitPriority('weekYear', 1);\n addUnitPriority('isoWeekYear', 1);\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday(),\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // ALIASES\n\n addUnitAlias('quarter', 'Q');\n\n // PRIORITY\n\n addUnitPriority('quarter', 7);\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // ALIASES\n\n addUnitAlias('date', 'D');\n\n // PRIORITY\n addUnitPriority('date', 9);\n\n // PARSING\n\n addRegexToken('D', match1to2);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // ALIASES\n\n addUnitAlias('dayOfYear', 'DDD');\n\n // PRIORITY\n addUnitPriority('dayOfYear', 4);\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // ALIASES\n\n addUnitAlias('minute', 'm');\n\n // PRIORITY\n\n addUnitPriority('minute', 14);\n\n // PARSING\n\n addRegexToken('m', match1to2);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // ALIASES\n\n addUnitAlias('second', 's');\n\n // PRIORITY\n\n addUnitPriority('second', 15);\n\n // PARSING\n\n addRegexToken('s', match1to2);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // ALIASES\n\n addUnitAlias('millisecond', 'ms');\n\n // PRIORITY\n\n addUnitPriority('millisecond', 16);\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n // TODO: Use this.as('ms')?\n function valueOf$1() {\n if (!this.isValid()) {\n return NaN;\n }\n return (\n this._milliseconds +\n this._days * 864e5 +\n (this._months % 12) * 2592e6 +\n toInt(this._months / 12) * 31536e6\n );\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y');\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.29.4';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // \n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // \n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // \n DATE: 'YYYY-MM-DD', // \n TIME: 'HH:mm', // \n TIME_SECONDS: 'HH:mm:ss', // \n TIME_MS: 'HH:mm:ss.SSS', // \n WEEK: 'GGGG-[W]WW', // \n MONTH: 'YYYY-MM', // \n };\n\n return hooks;\n\n})));\n"],"mappings":"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"},"metadata":{},"sourceType":"script"}