{"version":3,"file":"react-intl.min.js","sources":["react-intl/node_modules/intl-messageformat/src/utils.js","react-intl/node_modules/intl-messageformat/src/compiler.js","react-intl/node_modules/intl-messageformat/src/core.js","react-intl/node_modules/intl-relativeformat/src/diff.js","react-intl/node_modules/intl-relativeformat/src/core.js","react-intl/node_modules/intl-format-cache/src/memoizer.js","react-intl/src/mixin.js","react-intl/src/react-intl.js","react-intl/node_modules/intl-messageformat/src/es5.js","react-intl/node_modules/intl-messageformat/node_modules/intl-messageformat-parser/src/parser.js","react-intl/node_modules/intl-messageformat/src/en.js","react-intl/node_modules/intl-messageformat/src/main.js","react-intl/node_modules/intl-relativeformat/src/es5.js","react-intl/node_modules/intl-relativeformat/src/en.js","react-intl/node_modules/intl-relativeformat/src/main.js","react-intl/src/en.js","react-intl/src/react.js","react-intl/node_modules/intl-format-cache/src/es5.js","react-intl/src/components/date.js","react-intl/src/components/time.js","react-intl/src/components/relative.js","react-intl/src/components/number.js","react-intl/src/components/message.js","react-intl/src/escape.js","react-intl/src/components/html-message.js","react-intl/src/main.js"],"names":["$$utils$$extend","obj","i","len","source","key","sources","Array","prototype","slice","call","arguments","length","$$utils$$hop","$$compiler$$Compiler","locales","formats","pluralFn","this","$$compiler$$StringFormat","id","$$compiler$$PluralFormat","offset","options","$$compiler$$PluralOffsetString","numberFormat","string","$$compiler$$SelectFormat","$$core$$MessageFormat","message","ast","__parse","type","TypeError","_mergeFormats","value","_resolveLocale","__localeData__","_locale","pluralRuleFunction","pattern","_compilePattern","messageFormat","format","values","_format","$$diff$$daysToYears","days","$$core1$$RelativeFormat","$$es51$$isArray","concat","style","_resolveStyle","units","_isValidUnits","$$es51$$objCreate","relativeFormat","date","intl$format$cache$$createFormatCache","FormatConstructor","cache","$$es52$$objCreate","args","cacheId","intl$format$cache$$getCacheId","apply","inputs","JSON","input","push","intl$format$cache$$orderedProps","stringify","prop","props","keys","hasOwnProperty","orderedKeys","sort","$$mixin$$assertIsDate","errMsg","isFinite","$$react$intl$$__addLocaleData","data","__addLocaleData","Object","$$es5$$realDefineProp","defineProperty","e","$$es5$$defineProperty","__defineGetter__","name","desc","get","$$es5$$objCreate","create","proto","F","k","compile","pluralStack","currentPlural","pluralNumberFormat","compileMessage","Error","element","elements","compileMessageText","compileArgument","test","Intl","NumberFormat","replace","number","DateTimeFormat","time","compileOptions","optionsHash","option","selector","pop","String","getOption","other","peg$subclass","child","parent","ctor","constructor","SyntaxError","expected","found","line","column","parse","peg$computePosDetails","pos","advance","details","startPos","endPos","p","ch","charAt","seenCR","peg$cachedPos","peg$cachedPosDetails","peg$fail","peg$maxFailPos","peg$currPos","peg$maxFailExpected","peg$buildException","cleanupExpected","a","b","description","splice","buildMessage","stringEscape","s","hex","charCodeAt","toString","toUpperCase","expectedDesc","foundDesc","expectedDescs","join","posDetails","peg$parsestart","s0","peg$parsemessageFormatPattern","s1","s2","peg$parsemessageFormatElement","peg$FAILED","peg$reportedPos","peg$c1","peg$parsemessageTextElement","peg$parseargumentElement","peg$parsemessageText","s3","s4","s5","peg$parse_","peg$parsechars","peg$c2","peg$c3","peg$parsews","substring","peg$c4","peg$parseargument","peg$parsenumber","peg$c5","peg$silentFails","peg$c6","s6","s7","s8","peg$c7","peg$c8","peg$c10","peg$c11","peg$parseelementFormat","peg$c9","peg$c12","peg$c13","peg$c14","peg$parsesimpleFormat","peg$parsepluralFormat","peg$parseselectFormat","substr","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$parseoffset","peg$parseoptionalFormatPattern","peg$c24","peg$c25","peg$c26","peg$c27","peg$parseselector","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c35","peg$c36","peg$c34","peg$c37","peg$parsedigit","peg$c38","peg$c39","peg$parsehexDigit","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$parsechar","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$result","peg$startRuleFunctions","start","peg$startRuleFunction","text","j","outerLen","inner","innerLen","messageText","digits","parseInt","fromCharCode","chars","startRule","enumerable","currency","percent","short","month","day","year","medium","long","full","weekday","hour","minute","second","timeZoneName","locale","toLowerCase","split","intl$messageformat$parser$$default","writable","undefined","resolvedOptions","compiler","$$compiler$$default","part","result","defaults","mergedType","mergedFormats","defaultLocale","localeData","n","Math","floor","abs","v","$$en1$$default","$$es51$$hop","$$es51$$toString","$$es51$$realDefineProp","$$es51$$defineProperty","$$es51$$arrIndexOf","indexOf","search","fromIndex","arr","max","isArray","$$es51$$dateNow","Date","now","getTime","$$diff$$round","round","dfrom","dto","millisecond","week","rawYears","$$core1$$FIELDS","$$core1$$STYLES","fields","_options","_compileMessage","_locales","resolvedLocale","field","relativeTime","future","past","intl$messageformat$$default","RangeError","diffReport","$$diff$$default","_selectUnits","diffInUnits","relativeUnits","_resolveRelativeUnits","_resolveMessage","0","when","suggestion","hop","messages","_messages","diff","relative","l","thresholds","displayName","one","1","-1","$$en2$$default","React","$$es52$$hop","$$es52$$realDefineProp","$$es52$$defineProperty","$$mixin$$typesSpec","$$react$$default","PropTypes","oneOfType","array","object","statics","filterFormatOptions","formatOptions","reduce","opts","propsTypes","contextTypes","childContextTypes","getNumberFormat","intl$format$cache$$default","getDateTimeFormat","getMessageFormat","getRelativeFormat","intl$relativeformat$$default","getChildContext","context","formatDate","formatTime","formatRelative","formatNumber","num","formatMessage","getIntlMessage","path","pathParts","pathPart","ReferenceError","getNamedFormat","$$components$date$$FormattedDate","createClass","mixins","$$mixin$$default","propTypes","any","isRequired","render","DOM","span","$$components$time$$FormattedTime","$$components$relative$$FormattedRelative","$$components$number$$FormattedNumber","$$components$message$$FormattedMessage","tagName","getDefaultProps","guid","random","tokenRegex","RegExp","generateToken","counter","token","isValidElement","formattedMessage","children","map","elementArgs","createElement","$$$escape$$ESCAPED_CHARS","&",">","<","\"","'","$$$escape$$UNSAFE_CHARS_REGEX","str","match","$$components$html$message$$FormattedHTMLMessage","$$$escape$$default","renderToStaticMarkup","dangerouslySetInnerHTML","__html","$$en$$default","IntlMixin","FormattedDate","$$components$date$$default","FormattedTime","$$components$time$$default","FormattedRelative","$$components$relative$$default","FormattedNumber","$$components$number$$default","FormattedMessage","$$components$message$$default","FormattedHTMLMessage","$$components$html$message$$default","window","ReactIntlMixin"],"mappings":"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","sourcesContent":["/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nexport var hop = Object.prototype.hasOwnProperty;\n\nexport function extend(obj) {\n    var sources = Array.prototype.slice.call(arguments, 1),\n        i, len, source, key;\n\n    for (i = 0, len = sources.length; i < len; i += 1) {\n        source = sources[i];\n        if (!source) { continue; }\n\n        for (key in source) {\n            if (hop.call(source, key)) {\n                obj[key] = source[key];\n            }\n        }\n    }\n\n    return obj;\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nexport default Compiler;\n\nfunction Compiler(locales, formats, pluralFn) {\n    this.locales  = locales;\n    this.formats  = formats;\n    this.pluralFn = pluralFn;\n}\n\nCompiler.prototype.compile = function (ast) {\n    this.pluralStack        = [];\n    this.currentPlural      = null;\n    this.pluralNumberFormat = null;\n\n    return this.compileMessage(ast);\n};\n\nCompiler.prototype.compileMessage = function (ast) {\n    if (!(ast && ast.type === 'messageFormatPattern')) {\n        throw new Error('Message AST is not of type: \"messageFormatPattern\"');\n    }\n\n    var elements = ast.elements,\n        pattern  = [];\n\n    var i, len, element;\n\n    for (i = 0, len = elements.length; i < len; i += 1) {\n        element = elements[i];\n\n        switch (element.type) {\n            case 'messageTextElement':\n                pattern.push(this.compileMessageText(element));\n                break;\n\n            case 'argumentElement':\n                pattern.push(this.compileArgument(element));\n                break;\n\n            default:\n                throw new Error('Message element does not have a valid type');\n        }\n    }\n\n    return pattern;\n};\n\nCompiler.prototype.compileMessageText = function (element) {\n    // When this `element` is part of plural sub-pattern and its value contains\n    // an unescaped '#', use a `PluralOffsetString` helper to properly output\n    // the number with the correct offset in the string.\n    if (this.currentPlural && /(^|[^\\\\])#/g.test(element.value)) {\n        // Create a cache a NumberFormat instance that can be reused for any\n        // PluralOffsetString instance in this message.\n        if (!this.pluralNumberFormat) {\n            this.pluralNumberFormat = new Intl.NumberFormat(this.locales);\n        }\n\n        return new PluralOffsetString(\n                this.currentPlural.id,\n                this.currentPlural.format.offset,\n                this.pluralNumberFormat,\n                element.value);\n    }\n\n    // Unescape the escaped '#'s in the message text.\n    return element.value.replace(/\\\\#/g, '#');\n};\n\nCompiler.prototype.compileArgument = function (element) {\n    var format = element.format;\n\n    if (!format) {\n        return new StringFormat(element.id);\n    }\n\n    var formats  = this.formats,\n        locales  = this.locales,\n        pluralFn = this.pluralFn,\n        options;\n\n    switch (format.type) {\n        case 'numberFormat':\n            options = formats.number[format.style];\n            return {\n                id    : element.id,\n                format: new Intl.NumberFormat(locales, options).format\n            };\n\n        case 'dateFormat':\n            options = formats.date[format.style];\n            return {\n                id    : element.id,\n                format: new Intl.DateTimeFormat(locales, options).format\n            };\n\n        case 'timeFormat':\n            options = formats.time[format.style];\n            return {\n                id    : element.id,\n                format: new Intl.DateTimeFormat(locales, options).format\n            };\n\n        case 'pluralFormat':\n            options = this.compileOptions(element);\n            return new PluralFormat(element.id, format.offset, options, pluralFn);\n\n        case 'selectFormat':\n            options = this.compileOptions(element);\n            return new SelectFormat(element.id, options);\n\n        default:\n            throw new Error('Message element does not have a valid format type');\n    }\n};\n\nCompiler.prototype.compileOptions = function (element) {\n    var format      = element.format,\n        options     = format.options,\n        optionsHash = {};\n\n    // Save the current plural element, if any, then set it to a new value when\n    // compiling the options sub-patterns. This conform's the spec's algorithm\n    // for handling `\"#\"` synax in message text.\n    this.pluralStack.push(this.currentPlural);\n    this.currentPlural = format.type === 'pluralFormat' ? element : null;\n\n    var i, len, option;\n\n    for (i = 0, len = options.length; i < len; i += 1) {\n        option = options[i];\n\n        // Compile the sub-pattern and save it under the options's selector.\n        optionsHash[option.selector] = this.compileMessage(option.value);\n    }\n\n    // Pop the plural stack to put back the original currnet plural value.\n    this.currentPlural = this.pluralStack.pop();\n\n    return optionsHash;\n};\n\n// -- Compiler Helper Classes --------------------------------------------------\n\nfunction StringFormat(id) {\n    this.id = id;\n}\n\nStringFormat.prototype.format = function (value) {\n    if (!value) {\n        return '';\n    }\n\n    return typeof value === 'string' ? value : String(value);\n};\n\nfunction PluralFormat(id, offset, options, pluralFn) {\n    this.id       = id;\n    this.offset   = offset;\n    this.options  = options;\n    this.pluralFn = pluralFn;\n}\n\nPluralFormat.prototype.getOption = function (value) {\n    var options = this.options;\n\n    var option = options['=' + value] ||\n            options[this.pluralFn(value - this.offset)];\n\n    return option || options.other;\n};\n\nfunction PluralOffsetString(id, offset, numberFormat, string) {\n    this.id           = id;\n    this.offset       = offset;\n    this.numberFormat = numberFormat;\n    this.string       = string;\n}\n\nPluralOffsetString.prototype.format = function (value) {\n    var number = this.numberFormat.format(value - this.offset);\n\n    return this.string\n            .replace(/(^|[^\\\\])#/g, '$1' + number)\n            .replace(/\\\\#/g, '#');\n};\n\nfunction SelectFormat(id, options) {\n    this.id      = id;\n    this.options = options;\n}\n\nSelectFormat.prototype.getOption = function (value) {\n    var options = this.options;\n    return options[value] || options.other;\n};\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nimport {extend, hop} from './utils';\nimport {defineProperty, objCreate} from './es5';\nimport Compiler from './compiler';\nimport parser from 'intl-messageformat-parser';\n\nexport default MessageFormat;\n\n// -- MessageFormat --------------------------------------------------------\n\nfunction MessageFormat(message, locales, formats) {\n    // Parse string messages into an AST.\n    var ast = typeof message === 'string' ?\n            MessageFormat.__parse(message) : message;\n\n    if (!(ast && ast.type === 'messageFormatPattern')) {\n        throw new TypeError('A message must be provided as a String or AST.');\n    }\n\n    // Creates a new object with the specified `formats` merged with the default\n    // formats.\n    formats = this._mergeFormats(MessageFormat.formats, formats);\n\n    // Defined first because it's used to build the format pattern.\n    defineProperty(this, '_locale',  {value: this._resolveLocale(locales)});\n\n    var pluralFn = MessageFormat.__localeData__[this._locale].pluralRuleFunction;\n\n    // Compile the `ast` to a pattern that is highly optimized for repeated\n    // `format()` invocations. **Note:** This passes the `locales` set provided\n    // to the constructor instead of just the resolved locale.\n    var pattern = this._compilePattern(ast, locales, formats, pluralFn);\n\n    // \"Bind\" `format()` method to `this` so it can be passed by reference like\n    // the other `Intl` APIs.\n    var messageFormat = this;\n    this.format = function (values) {\n        return messageFormat._format(pattern, values);\n    };\n}\n\n// Default format options used as the prototype of the `formats` provided to the\n// constructor. These are used when constructing the internal Intl.NumberFormat\n// and Intl.DateTimeFormat instances.\ndefineProperty(MessageFormat, 'formats', {\n    enumerable: true,\n\n    value: {\n        number: {\n            'currency': {\n                style: 'currency'\n            },\n\n            'percent': {\n                style: 'percent'\n            }\n        },\n\n        date: {\n            'short': {\n                month: 'numeric',\n                day  : 'numeric',\n                year : '2-digit'\n            },\n\n            'medium': {\n                month: 'short',\n                day  : 'numeric',\n                year : 'numeric'\n            },\n\n            'long': {\n                month: 'long',\n                day  : 'numeric',\n                year : 'numeric'\n            },\n\n            'full': {\n                weekday: 'long',\n                month  : 'long',\n                day    : 'numeric',\n                year   : 'numeric'\n            }\n        },\n\n        time: {\n            'short': {\n                hour  : 'numeric',\n                minute: 'numeric'\n            },\n\n            'medium':  {\n                hour  : 'numeric',\n                minute: 'numeric',\n                second: 'numeric'\n            },\n\n            'long': {\n                hour        : 'numeric',\n                minute      : 'numeric',\n                second      : 'numeric',\n                timeZoneName: 'short'\n            },\n\n            'full': {\n                hour        : 'numeric',\n                minute      : 'numeric',\n                second      : 'numeric',\n                timeZoneName: 'short'\n            }\n        }\n    }\n});\n\n// Define internal private properties for dealing with locale data.\ndefineProperty(MessageFormat, '__localeData__', {value: objCreate(null)});\ndefineProperty(MessageFormat, '__addLocaleData', {value: function (data) {\n    if (!(data && data.locale)) {\n        throw new Error(\n            'Locale data provided to IntlMessageFormat is missing a ' +\n            '`locale` property'\n        );\n    }\n\n    if (!data.pluralRuleFunction) {\n        throw new Error(\n            'Locale data provided to IntlMessageFormat is missing a ' +\n            '`pluralRuleFunction` property'\n        );\n    }\n\n    // Message format locale data only requires the first part of the tag.\n    var locale = data.locale.toLowerCase().split('-')[0];\n\n    MessageFormat.__localeData__[locale] = data;\n}});\n\n// Defines `__parse()` static method as an exposed private.\ndefineProperty(MessageFormat, '__parse', {value: parser.parse});\n\n// Define public `defaultLocale` property which defaults to English, but can be\n// set by the developer.\ndefineProperty(MessageFormat, 'defaultLocale', {\n    enumerable: true,\n    writable  : true,\n    value     : undefined\n});\n\nMessageFormat.prototype.resolvedOptions = function () {\n    // TODO: Provide anything else?\n    return {\n        locale: this._locale\n    };\n};\n\nMessageFormat.prototype._compilePattern = function (ast, locales, formats, pluralFn) {\n    var compiler = new Compiler(locales, formats, pluralFn);\n    return compiler.compile(ast);\n};\n\nMessageFormat.prototype._format = function (pattern, values) {\n    var result = '',\n        i, len, part, id, value;\n\n    for (i = 0, len = pattern.length; i < len; i += 1) {\n        part = pattern[i];\n\n        // Exist early for string parts.\n        if (typeof part === 'string') {\n            result += part;\n            continue;\n        }\n\n        id = part.id;\n\n        // Enforce that all required values are provided by the caller.\n        if (!(values && hop.call(values, id))) {\n            throw new Error('A value must be provided for: ' + id);\n        }\n\n        value = values[id];\n\n        // Recursively format plural and select parts' option — which can be a\n        // nested pattern structure. The choosing of the option to use is\n        // abstracted-by and delegated-to the part helper object.\n        if (part.options) {\n            result += this._format(part.getOption(value), values);\n        } else {\n            result += part.format(value);\n        }\n    }\n\n    return result;\n};\n\nMessageFormat.prototype._mergeFormats = function (defaults, formats) {\n    var mergedFormats = {},\n        type, mergedType;\n\n    for (type in defaults) {\n        if (!hop.call(defaults, type)) { continue; }\n\n        mergedFormats[type] = mergedType = objCreate(defaults[type]);\n\n        if (formats && hop.call(formats, type)) {\n            extend(mergedType, formats[type]);\n        }\n    }\n\n    return mergedFormats;\n};\n\nMessageFormat.prototype._resolveLocale = function (locales) {\n    if (!locales) {\n        locales = MessageFormat.defaultLocale;\n    }\n\n    if (typeof locales === 'string') {\n        locales = [locales];\n    }\n\n    var localeData = MessageFormat.__localeData__;\n    var i, len, locale;\n\n    for (i = 0, len = locales.length; i < len; i += 1) {\n        // We just need the root part of the langage tag.\n        locale = locales[i].split('-')[0].toLowerCase();\n\n        // Validate that the langage tag is structurally valid.\n        if (!/[a-z]{2,3}/.test(locale)) {\n            throw new Error(\n                'Language tag provided to IntlMessageFormat is not ' +\n                'structrually valid: ' + locale\n            );\n        }\n\n        // Return the first locale for which we have CLDR data registered.\n        if (hop.call(localeData, locale)) {\n            return locale;\n        }\n    }\n\n    throw new Error(\n        'No locale data has been added to IntlMessageFormat for: ' +\n        locales.join(', ')\n    );\n};\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nvar round = Math.round;\n\nfunction daysToYears (days) {\n    // 400 years have 146097 days (taking into account leap year rules)\n    return days * 400 / 146097;\n}\n\nexport default function (dfrom, dto) {\n    // Convert to ms timestamps.\n    dfrom = +dfrom;\n    dto   = +dto;\n\n    var millisecond = round(dto - dfrom),\n        second      = round(millisecond / 1000),\n        minute      = round(second / 60),\n        hour        = round(minute / 60),\n        day         = round(hour / 24),\n        week        = round(day / 7);\n\n    var rawYears = daysToYears(day),\n        month    = round(rawYears * 12),\n        year     = round(rawYears);\n\n    return {\n        millisecond: millisecond,\n        second     : second,\n        minute     : minute,\n        hour       : hour,\n        day        : day,\n        week       : week,\n        month      : month,\n        year       : year\n    };\n}\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nimport {defineProperty, objCreate, arrIndexOf, isArray, dateNow} from './es5';\nimport IntlMessageFormat from 'intl-messageformat';\nimport diff from './diff';\n\nexport default RelativeFormat;\n\n// -----------------------------------------------------------------------------\n\nvar FIELDS = ['second', 'minute', 'hour', 'day', 'month', 'year'];\nvar STYLES = ['best fit', 'numeric'];\n\n// -- RelativeFormat -----------------------------------------------------------\n\nfunction RelativeFormat(locales, options) {\n    options = options || {};\n\n    // Make a copy of `locales` if it's an array, so that it doesn't change\n    // since it's used lazily.\n    if (isArray(locales)) {\n        locales = locales.concat();\n    }\n\n    defineProperty(this, '_locale', {value: this._resolveLocale(locales)});\n    defineProperty(this, '_locales', {value: locales});\n    defineProperty(this, '_options', {value: {\n        style: this._resolveStyle(options.style),\n        units: this._isValidUnits(options.units) && options.units\n    }});\n\n    defineProperty(this, '_messages', {value: objCreate(null)});\n\n    // \"Bind\" `format()` method to `this` so it can be passed by reference like\n    // the other `Intl` APIs.\n    var relativeFormat = this;\n    this.format = function format(date) {\n        return relativeFormat._format(date);\n    };\n}\n\n// Define internal private properties for dealing with locale data.\ndefineProperty(RelativeFormat, '__localeData__', {value: objCreate(null)});\ndefineProperty(RelativeFormat, '__addLocaleData', {value: function (data) {\n    if (!(data && data.locale)) {\n        throw new Error(\n            'Locale data provided to IntlRelativeFormat is missing a ' +\n            '`locale` property value'\n        );\n    }\n\n    if (!data.fields) {\n        throw new Error(\n            'Locale data provided to IntlRelativeFormat is missing a ' +\n            '`fields` property value'\n        );\n    }\n\n    // Add data to IntlMessageFormat.\n    IntlMessageFormat.__addLocaleData(data);\n\n    // Relative format locale data only requires the first part of the tag.\n    var locale = data.locale.toLowerCase().split('-')[0];\n\n    RelativeFormat.__localeData__[locale] = data;\n}});\n\n// Define public `defaultLocale` property which can be set by the developer, or\n// it will be set when the first RelativeFormat instance is created by leveraging\n// the resolved locale from `Intl`.\ndefineProperty(RelativeFormat, 'defaultLocale', {\n    enumerable: true,\n    writable  : true,\n    value     : undefined\n});\n\n// Define public `thresholds` property which can be set by the developer, and\n// defaults to relative time thresholds from moment.js.\ndefineProperty(RelativeFormat, 'thresholds', {\n    enumerable: true,\n\n    value: {\n        second: 45,  // seconds to minute\n        minute: 45,  // minutes to hour\n        hour  : 22,  // hours to day\n        day   : 26,  // days to month\n        month : 11   // months to year\n    }\n});\n\nRelativeFormat.prototype.resolvedOptions = function () {\n    return {\n        locale: this._locale,\n        style : this._options.style,\n        units : this._options.units\n    };\n};\n\nRelativeFormat.prototype._compileMessage = function (units) {\n    // `this._locales` is the original set of locales the user specificed to the\n    // constructor, while `this._locale` is the resolved root locale.\n    var locales        = this._locales;\n    var resolvedLocale = this._locale;\n\n    var localeData   = RelativeFormat.__localeData__;\n    var field        = localeData[resolvedLocale].fields[units];\n    var relativeTime = field.relativeTime;\n    var future       = '';\n    var past         = '';\n    var i;\n\n    for (i in relativeTime.future) {\n        if (relativeTime.future.hasOwnProperty(i)) {\n            future += ' ' + i + ' {' +\n                relativeTime.future[i].replace('{0}', '#') + '}';\n        }\n    }\n\n    for (i in relativeTime.past) {\n        if (relativeTime.past.hasOwnProperty(i)) {\n            past += ' ' + i + ' {' +\n                relativeTime.past[i].replace('{0}', '#') + '}';\n        }\n    }\n\n    var message = '{when, select, future {{0, plural, ' + future + '}}' +\n                                 'past {{0, plural, ' + past + '}}}';\n\n    // Create the synthetic IntlMessageFormat instance using the original\n    // locales value specified by the user when constructing the the parent\n    // IntlRelativeFormat instance.\n    return new IntlMessageFormat(message, locales);\n};\n\nRelativeFormat.prototype._format = function (date) {\n    var now = dateNow();\n\n    if (date === undefined) {\n        date = now;\n    }\n\n    // Determine if the `date` is valid, and throw a similar error to what\n    // `Intl.DateTimeFormat#format()` would throw.\n    if (!isFinite(date)) {\n        throw new RangeError(\n            'The date value provided to IntlRelativeFormat#format() is not ' +\n            'in valid range.'\n        );\n    }\n\n    var diffReport  = diff(now, date);\n    var units       = this._options.units || this._selectUnits(diffReport);\n    var diffInUnits = diffReport[units];\n\n    if (this._options.style !== 'numeric') {\n        var relativeUnits = this._resolveRelativeUnits(diffInUnits, units);\n        if (relativeUnits) {\n            return relativeUnits;\n        }\n    }\n\n    return this._resolveMessage(units).format({\n        '0' : Math.abs(diffInUnits),\n        when: diffInUnits < 0 ? 'past' : 'future'\n    });\n};\n\nRelativeFormat.prototype._isValidUnits = function (units) {\n    if (!units || arrIndexOf.call(FIELDS, units) >= 0) {\n        return true;\n    }\n\n    if (typeof units === 'string') {\n        var suggestion = /s$/.test(units) && units.substr(0, units.length - 1);\n        if (suggestion && arrIndexOf.call(FIELDS, suggestion) >= 0) {\n            throw new Error(\n                '\"' + units + '\" is not a valid IntlRelativeFormat `units` ' +\n                'value, did you mean: ' + suggestion\n            );\n        }\n    }\n\n    throw new Error(\n        '\"' + units + '\" is not a valid IntlRelativeFormat `units` value, it ' +\n        'must be one of: \"' + FIELDS.join('\", \"') + '\"'\n    );\n};\n\nRelativeFormat.prototype._resolveLocale = function (locales) {\n    if (!locales) {\n        locales = RelativeFormat.defaultLocale;\n    }\n\n    if (typeof locales === 'string') {\n        locales = [locales];\n    }\n\n    var hop        = Object.prototype.hasOwnProperty;\n    var localeData = RelativeFormat.__localeData__;\n    var i, len, locale;\n\n    for (i = 0, len = locales.length; i < len; i += 1) {\n        // We just need the root part of the language tag.\n        locale = locales[i].split('-')[0].toLowerCase();\n\n        // Validate that the language tag is structurally valid.\n        if (!/[a-z]{2,3}/.test(locale)) {\n            throw new Error(\n                'Language tag provided to IntlRelativeFormat is not ' +\n                'structrually valid: ' + locale\n            );\n        }\n\n        // Return the first locale for which we have CLDR data registered.\n        if (hop.call(localeData, locale)) {\n            return locale;\n        }\n    }\n\n    throw new Error(\n        'No locale data has been added to IntlRelativeFormat for: ' +\n        locales.join(', ')\n    );\n};\n\nRelativeFormat.prototype._resolveMessage = function (units) {\n    var messages = this._messages;\n\n    // Create a new synthetic message based on the locale data from CLDR.\n    if (!messages[units]) {\n        messages[units] = this._compileMessage(units);\n    }\n\n    return messages[units];\n};\n\nRelativeFormat.prototype._resolveRelativeUnits = function (diff, units) {\n    var field = RelativeFormat.__localeData__[this._locale].fields[units];\n\n    if (field.relative) {\n        return field.relative[diff];\n    }\n};\n\nRelativeFormat.prototype._resolveStyle = function (style) {\n    // Default to \"best fit\" style.\n    if (!style) {\n        return STYLES[0];\n    }\n\n    if (arrIndexOf.call(STYLES, style) >= 0) {\n        return style;\n    }\n\n    throw new Error(\n        '\"' + style + '\" is not a valid IntlRelativeFormat `style` value, it ' +\n        'must be one of: \"' + STYLES.join('\", \"') + '\"'\n    );\n};\n\nRelativeFormat.prototype._selectUnits = function (diffReport) {\n    var i, l, units;\n\n    for (i = 0, l = FIELDS.length; i < l; i += 1) {\n        units = FIELDS[i];\n\n        if (Math.abs(diffReport[units]) < RelativeFormat.thresholds[units]) {\n            break;\n        }\n    }\n\n    return units;\n};\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jshint esnext: true */\n\nimport {objCreate} from './es5';\n\nexport default createFormatCache;\n\n// -----------------------------------------------------------------------------\n\nfunction createFormatCache(FormatConstructor) {\n    var cache = objCreate(null);\n\n    return function () {\n        var args    = Array.prototype.slice.call(arguments);\n        var cacheId = getCacheId(args);\n        var format  = cacheId && cache[cacheId];\n\n        if (!format) {\n            format = objCreate(FormatConstructor.prototype);\n            FormatConstructor.apply(format, args);\n\n            if (cacheId) {\n                cache[cacheId] = format;\n            }\n        }\n\n        return format;\n    };\n}\n\n// -- Utilities ----------------------------------------------------------------\n\nfunction getCacheId(inputs) {\n    // When JSON is not available in the runtime, we will not create a cache id.\n    if (typeof JSON === 'undefined') { return; }\n\n    var cacheId = [];\n\n    var i, len, input;\n\n    for (i = 0, len = inputs.length; i < len; i += 1) {\n        input = inputs[i];\n\n        if (input && typeof input === 'object') {\n            cacheId.push(orderedProps(input));\n        } else {\n            cacheId.push(input);\n        }\n    }\n\n    return JSON.stringify(cacheId);\n}\n\nfunction orderedProps(obj) {\n    var props = [],\n        keys  = [];\n\n    var key, i, len, prop;\n\n    for (key in obj) {\n        if (obj.hasOwnProperty(key)) {\n            keys.push(key);\n        }\n    }\n\n    var orderedKeys = keys.sort();\n\n    for (i = 0, len = orderedKeys.length; i < len; i += 1) {\n        key  = orderedKeys[i];\n        prop = {};\n\n        prop[key] = obj[key];\n        props[i]  = prop;\n    }\n\n    return props;\n}\n","/* jshint esnext:true */\n\n// TODO: Use `import React from \"react\";` when external modules are supported.\nimport React from './react';\n\nimport IntlMessageFormat from 'intl-messageformat';\nimport IntlRelativeFormat from 'intl-relativeformat';\nimport createFormatCache from 'intl-format-cache';\n\n// -----------------------------------------------------------------------------\n\nvar typesSpec = {\n    locales: React.PropTypes.oneOfType([\n        React.PropTypes.string,\n        React.PropTypes.array\n    ]),\n\n    formats : React.PropTypes.object,\n    messages: React.PropTypes.object\n};\n\nfunction assertIsDate(date, errMsg) {\n    // Determine if the `date` is valid by checking if it is finite, which is\n    // the same way that `Intl.DateTimeFormat#format()` checks.\n    if (!isFinite(date)) {\n        throw new TypeError(errMsg);\n    }\n}\n\nexport default {\n    statics: {\n        filterFormatOptions: function (obj, defaults) {\n            if (!defaults) { defaults = {}; }\n\n            return (this.formatOptions || []).reduce(function (opts, name) {\n                if (obj.hasOwnProperty(name)) {\n                    opts[name] = obj[name];\n                } else if (defaults.hasOwnProperty(name)) {\n                    opts[name] = defaults[name];\n                }\n\n                return opts;\n            }, {});\n        }\n    },\n\n    propsTypes       : typesSpec,\n    contextTypes     : typesSpec,\n    childContextTypes: typesSpec,\n\n    getNumberFormat  : createFormatCache(Intl.NumberFormat),\n    getDateTimeFormat: createFormatCache(Intl.DateTimeFormat),\n    getMessageFormat : createFormatCache(IntlMessageFormat),\n    getRelativeFormat: createFormatCache(IntlRelativeFormat),\n\n    getChildContext: function () {\n        var context = this.context;\n        var props   = this.props;\n\n        return {\n            locales:  props.locales  || context.locales,\n            formats:  props.formats  || context.formats,\n            messages: props.messages || context.messages\n        };\n    },\n\n    formatDate: function (date, options) {\n        date = new Date(date);\n        assertIsDate(date, 'A date or timestamp must be provided to formatDate()');\n        return this._format('date', date, options);\n    },\n\n    formatTime: function (date, options) {\n        date = new Date(date);\n        assertIsDate(date, 'A date or timestamp must be provided to formatTime()');\n        return this._format('time', date, options);\n    },\n\n    formatRelative: function (date, options) {\n        date = new Date(date);\n        assertIsDate(date, 'A date or timestamp must be provided to formatRelative()');\n        return this._format('relative', date, options);\n    },\n\n    formatNumber: function (num, options) {\n        return this._format('number', num, options);\n    },\n\n    formatMessage: function (message, values) {\n        var locales = this.props.locales || this.context.locales;\n        var formats = this.props.formats || this.context.formats;\n\n        // When `message` is a function, assume it's an IntlMessageFormat\n        // instance's `format()` method passed by reference, and call it. This\n        // is possible because its `this` will be pre-bound to the instance.\n        if (typeof message === 'function') {\n            return message(values);\n        }\n\n        if (typeof message === 'string') {\n            message = this.getMessageFormat(message, locales, formats);\n        }\n\n        return message.format(values);\n    },\n\n    getIntlMessage: function (path) {\n        var messages  = this.props.messages || this.context.messages;\n        var pathParts = path.split('.');\n\n        var message;\n\n        try {\n            message = pathParts.reduce(function (obj, pathPart) {\n                return obj[pathPart];\n            }, messages);\n        } finally {\n            if (message === undefined) {\n                throw new ReferenceError('Could not find Intl message: ' + path);\n            }\n        }\n\n        return message;\n    },\n\n    getNamedFormat: function (type, name) {\n        var formats = this.props.formats || this.context.formats;\n        var format  = null;\n\n        try {\n            format = formats[type][name];\n        } finally {\n            if (!format) {\n                throw new ReferenceError(\n                    'No ' + type + ' format named: ' + name\n                );\n            }\n        }\n\n        return format;\n    },\n\n    _format: function (type, value, options) {\n        var locales = this.props.locales || this.context.locales;\n\n        if (options && typeof options === 'string') {\n            options = this.getNamedFormat(type, options);\n        }\n\n        switch(type) {\n            case 'date':\n            case 'time':\n                return this.getDateTimeFormat(locales, options).format(value);\n            case 'number':\n                return this.getNumberFormat(locales, options).format(value);\n            case 'relative':\n                return this.getRelativeFormat(locales, options).format(value);\n            default:\n                throw new Error('Unrecognized format type: ' + type);\n        }\n    }\n};\n","/* jshint esnext: true */\n\nimport IntlMessageFormat from 'intl-messageformat';\nimport IntlRelativeFormat from 'intl-relativeformat';\n\nimport defaultLocale from './en';\n\nimport IntlMixin from './mixin';\nimport FormattedDate from './components/date';\nimport FormattedTime from './components/time';\nimport FormattedRelative from './components/relative';\nimport FormattedNumber from './components/number';\nimport FormattedMessage from './components/message';\nimport FormattedHTMLMessage from './components/html-message';\n\nexport {\n    IntlMixin,\n    FormattedDate,\n    FormattedTime,\n    FormattedRelative,\n    FormattedNumber,\n    FormattedMessage,\n    FormattedHTMLMessage\n};\n\nexport function __addLocaleData(data) {\n    IntlMessageFormat.__addLocaleData(data);\n    IntlRelativeFormat.__addLocaleData(data);\n}\n\n__addLocaleData(defaultLocale);\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nimport {hop} from './utils';\n\nexport {defineProperty, objCreate};\n\n// Purposely using the same implementation as the Intl.js `Intl` polyfill.\n// Copyright 2013 Andy Earnshaw, MIT License\n\nvar realDefineProp = (function () {\n    try { return !!Object.defineProperty({}, 'a', {}); }\n    catch (e) { return false; }\n})();\n\nvar es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\nvar defineProperty = realDefineProp ? Object.defineProperty :\n        function (obj, name, desc) {\n\n    if ('get' in desc && obj.__defineGetter__) {\n        obj.__defineGetter__(name, desc.get);\n    } else if (!hop.call(obj, name) || 'value' in desc) {\n        obj[name] = desc.value;\n    }\n};\n\nvar objCreate = Object.create || function (proto, props) {\n    var obj, k;\n\n    function F() {}\n    F.prototype = proto;\n    obj = new F();\n\n    for (k in props) {\n        if (hop.call(props, k)) {\n            defineProperty(obj, k, props[k]);\n        }\n    }\n\n    return obj;\n};\n","export default (function() {\n  /*\n   * Generated by PEG.js 0.8.0.\n   *\n   * http://pegjs.majda.cz/\n   */\n\n  function peg$subclass(child, parent) {\n    function ctor() { this.constructor = child; }\n    ctor.prototype = parent.prototype;\n    child.prototype = new ctor();\n  }\n\n  function SyntaxError(message, expected, found, offset, line, column) {\n    this.message  = message;\n    this.expected = expected;\n    this.found    = found;\n    this.offset   = offset;\n    this.line     = line;\n    this.column   = column;\n\n    this.name     = \"SyntaxError\";\n  }\n\n  peg$subclass(SyntaxError, Error);\n\n  function parse(input) {\n    var options = arguments.length > 1 ? arguments[1] : {},\n\n        peg$FAILED = {},\n\n        peg$startRuleFunctions = { start: peg$parsestart },\n        peg$startRuleFunction  = peg$parsestart,\n\n        peg$c0 = [],\n        peg$c1 = function(elements) {\n                return {\n                    type    : 'messageFormatPattern',\n                    elements: elements\n                };\n            },\n        peg$c2 = peg$FAILED,\n        peg$c3 = function(text) {\n                var string = '',\n                    i, j, outerLen, inner, innerLen;\n\n                for (i = 0, outerLen = text.length; i < outerLen; i += 1) {\n                    inner = text[i];\n\n                    for (j = 0, innerLen = inner.length; j < innerLen; j += 1) {\n                        string += inner[j];\n                    }\n                }\n\n                return string;\n            },\n        peg$c4 = function(messageText) {\n                return {\n                    type : 'messageTextElement',\n                    value: messageText\n                };\n            },\n        peg$c5 = /^[^ \\t\\n\\r,.+={}#]/,\n        peg$c6 = { type: \"class\", value: \"[^ \\\\t\\\\n\\\\r,.+={}#]\", description: \"[^ \\\\t\\\\n\\\\r,.+={}#]\" },\n        peg$c7 = \"{\",\n        peg$c8 = { type: \"literal\", value: \"{\", description: \"\\\"{\\\"\" },\n        peg$c9 = null,\n        peg$c10 = \",\",\n        peg$c11 = { type: \"literal\", value: \",\", description: \"\\\",\\\"\" },\n        peg$c12 = \"}\",\n        peg$c13 = { type: \"literal\", value: \"}\", description: \"\\\"}\\\"\" },\n        peg$c14 = function(id, format) {\n                return {\n                    type  : 'argumentElement',\n                    id    : id,\n                    format: format && format[2]\n                };\n            },\n        peg$c15 = \"number\",\n        peg$c16 = { type: \"literal\", value: \"number\", description: \"\\\"number\\\"\" },\n        peg$c17 = \"date\",\n        peg$c18 = { type: \"literal\", value: \"date\", description: \"\\\"date\\\"\" },\n        peg$c19 = \"time\",\n        peg$c20 = { type: \"literal\", value: \"time\", description: \"\\\"time\\\"\" },\n        peg$c21 = function(type, style) {\n                return {\n                    type : type + 'Format',\n                    style: style && style[2]\n                };\n            },\n        peg$c22 = \"plural\",\n        peg$c23 = { type: \"literal\", value: \"plural\", description: \"\\\"plural\\\"\" },\n        peg$c24 = function(offset, options) {\n                return {\n                    type   : 'pluralFormat',\n                    offset : offset || 0,\n                    options: options\n                }\n            },\n        peg$c25 = \"select\",\n        peg$c26 = { type: \"literal\", value: \"select\", description: \"\\\"select\\\"\" },\n        peg$c27 = function(options) {\n                return {\n                    type   : 'selectFormat',\n                    options: options\n                }\n            },\n        peg$c28 = \"=\",\n        peg$c29 = { type: \"literal\", value: \"=\", description: \"\\\"=\\\"\" },\n        peg$c30 = function(selector, pattern) {\n                return {\n                    type    : 'optionalFormatPattern',\n                    selector: selector,\n                    value   : pattern\n                };\n            },\n        peg$c31 = \"offset:\",\n        peg$c32 = { type: \"literal\", value: \"offset:\", description: \"\\\"offset:\\\"\" },\n        peg$c33 = function(number) {\n                return number;\n            },\n        peg$c34 = { type: \"other\", description: \"whitespace\" },\n        peg$c35 = /^[ \\t\\n\\r]/,\n        peg$c36 = { type: \"class\", value: \"[ \\\\t\\\\n\\\\r]\", description: \"[ \\\\t\\\\n\\\\r]\" },\n        peg$c37 = { type: \"other\", description: \"optionalWhitespace\" },\n        peg$c38 = /^[0-9]/,\n        peg$c39 = { type: \"class\", value: \"[0-9]\", description: \"[0-9]\" },\n        peg$c40 = /^[0-9a-f]/i,\n        peg$c41 = { type: \"class\", value: \"[0-9a-f]i\", description: \"[0-9a-f]i\" },\n        peg$c42 = \"0\",\n        peg$c43 = { type: \"literal\", value: \"0\", description: \"\\\"0\\\"\" },\n        peg$c44 = /^[1-9]/,\n        peg$c45 = { type: \"class\", value: \"[1-9]\", description: \"[1-9]\" },\n        peg$c46 = function(digits) {\n            return parseInt(digits, 10);\n        },\n        peg$c47 = /^[^{}\\\\\\0-\\x1F \\t\\n\\r]/,\n        peg$c48 = { type: \"class\", value: \"[^{}\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\", description: \"[^{}\\\\\\\\\\\\0-\\\\x1F \\\\t\\\\n\\\\r]\" },\n        peg$c49 = \"\\\\#\",\n        peg$c50 = { type: \"literal\", value: \"\\\\#\", description: \"\\\"\\\\\\\\#\\\"\" },\n        peg$c51 = function() { return '\\\\#'; },\n        peg$c52 = \"\\\\{\",\n        peg$c53 = { type: \"literal\", value: \"\\\\{\", description: \"\\\"\\\\\\\\{\\\"\" },\n        peg$c54 = function() { return '\\u007B'; },\n        peg$c55 = \"\\\\}\",\n        peg$c56 = { type: \"literal\", value: \"\\\\}\", description: \"\\\"\\\\\\\\}\\\"\" },\n        peg$c57 = function() { return '\\u007D'; },\n        peg$c58 = \"\\\\u\",\n        peg$c59 = { type: \"literal\", value: \"\\\\u\", description: \"\\\"\\\\\\\\u\\\"\" },\n        peg$c60 = function(digits) {\n                return String.fromCharCode(parseInt(digits, 16));\n            },\n        peg$c61 = function(chars) { return chars.join(''); },\n\n        peg$currPos          = 0,\n        peg$reportedPos      = 0,\n        peg$cachedPos        = 0,\n        peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },\n        peg$maxFailPos       = 0,\n        peg$maxFailExpected  = [],\n        peg$silentFails      = 0,\n\n        peg$result;\n\n    if (\"startRule\" in options) {\n      if (!(options.startRule in peg$startRuleFunctions)) {\n        throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n      }\n\n      peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n    }\n\n    function text() {\n      return input.substring(peg$reportedPos, peg$currPos);\n    }\n\n    function offset() {\n      return peg$reportedPos;\n    }\n\n    function line() {\n      return peg$computePosDetails(peg$reportedPos).line;\n    }\n\n    function column() {\n      return peg$computePosDetails(peg$reportedPos).column;\n    }\n\n    function expected(description) {\n      throw peg$buildException(\n        null,\n        [{ type: \"other\", description: description }],\n        peg$reportedPos\n      );\n    }\n\n    function error(message) {\n      throw peg$buildException(message, null, peg$reportedPos);\n    }\n\n    function peg$computePosDetails(pos) {\n      function advance(details, startPos, endPos) {\n        var p, ch;\n\n        for (p = startPos; p < endPos; p++) {\n          ch = input.charAt(p);\n          if (ch === \"\\n\") {\n            if (!details.seenCR) { details.line++; }\n            details.column = 1;\n            details.seenCR = false;\n          } else if (ch === \"\\r\" || ch === \"\\u2028\" || ch === \"\\u2029\") {\n            details.line++;\n            details.column = 1;\n            details.seenCR = true;\n          } else {\n            details.column++;\n            details.seenCR = false;\n          }\n        }\n      }\n\n      if (peg$cachedPos !== pos) {\n        if (peg$cachedPos > pos) {\n          peg$cachedPos = 0;\n          peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };\n        }\n        advance(peg$cachedPosDetails, peg$cachedPos, pos);\n        peg$cachedPos = pos;\n      }\n\n      return peg$cachedPosDetails;\n    }\n\n    function peg$fail(expected) {\n      if (peg$currPos < peg$maxFailPos) { return; }\n\n      if (peg$currPos > peg$maxFailPos) {\n        peg$maxFailPos = peg$currPos;\n        peg$maxFailExpected = [];\n      }\n\n      peg$maxFailExpected.push(expected);\n    }\n\n    function peg$buildException(message, expected, pos) {\n      function cleanupExpected(expected) {\n        var i = 1;\n\n        expected.sort(function(a, b) {\n          if (a.description < b.description) {\n            return -1;\n          } else if (a.description > b.description) {\n            return 1;\n          } else {\n            return 0;\n          }\n        });\n\n        while (i < expected.length) {\n          if (expected[i - 1] === expected[i]) {\n            expected.splice(i, 1);\n          } else {\n            i++;\n          }\n        }\n      }\n\n      function buildMessage(expected, found) {\n        function stringEscape(s) {\n          function hex(ch) { return ch.charCodeAt(0).toString(16).toUpperCase(); }\n\n          return s\n            .replace(/\\\\/g,   '\\\\\\\\')\n            .replace(/\"/g,    '\\\\\"')\n            .replace(/\\x08/g, '\\\\b')\n            .replace(/\\t/g,   '\\\\t')\n            .replace(/\\n/g,   '\\\\n')\n            .replace(/\\f/g,   '\\\\f')\n            .replace(/\\r/g,   '\\\\r')\n            .replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(ch) { return '\\\\x0' + hex(ch); })\n            .replace(/[\\x10-\\x1F\\x80-\\xFF]/g,    function(ch) { return '\\\\x'  + hex(ch); })\n            .replace(/[\\u0180-\\u0FFF]/g,         function(ch) { return '\\\\u0' + hex(ch); })\n            .replace(/[\\u1080-\\uFFFF]/g,         function(ch) { return '\\\\u'  + hex(ch); });\n        }\n\n        var expectedDescs = new Array(expected.length),\n            expectedDesc, foundDesc, i;\n\n        for (i = 0; i < expected.length; i++) {\n          expectedDescs[i] = expected[i].description;\n        }\n\n        expectedDesc = expected.length > 1\n          ? expectedDescs.slice(0, -1).join(\", \")\n              + \" or \"\n              + expectedDescs[expected.length - 1]\n          : expectedDescs[0];\n\n        foundDesc = found ? \"\\\"\" + stringEscape(found) + \"\\\"\" : \"end of input\";\n\n        return \"Expected \" + expectedDesc + \" but \" + foundDesc + \" found.\";\n      }\n\n      var posDetails = peg$computePosDetails(pos),\n          found      = pos < input.length ? input.charAt(pos) : null;\n\n      if (expected !== null) {\n        cleanupExpected(expected);\n      }\n\n      return new SyntaxError(\n        message !== null ? message : buildMessage(expected, found),\n        expected,\n        found,\n        pos,\n        posDetails.line,\n        posDetails.column\n      );\n    }\n\n    function peg$parsestart() {\n      var s0;\n\n      s0 = peg$parsemessageFormatPattern();\n\n      return s0;\n    }\n\n    function peg$parsemessageFormatPattern() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parsemessageFormatElement();\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$parsemessageFormatElement();\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c1(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsemessageFormatElement() {\n      var s0;\n\n      s0 = peg$parsemessageTextElement();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parseargumentElement();\n      }\n\n      return s0;\n    }\n\n    function peg$parsemessageText() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$currPos;\n      s3 = peg$parse_();\n      if (s3 !== peg$FAILED) {\n        s4 = peg$parsechars();\n        if (s4 !== peg$FAILED) {\n          s5 = peg$parse_();\n          if (s5 !== peg$FAILED) {\n            s3 = [s3, s4, s5];\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$c2;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$c2;\n        }\n      } else {\n        peg$currPos = s2;\n        s2 = peg$c2;\n      }\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          s2 = peg$currPos;\n          s3 = peg$parse_();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parsechars();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse_();\n              if (s5 !== peg$FAILED) {\n                s3 = [s3, s4, s5];\n                s2 = s3;\n              } else {\n                peg$currPos = s2;\n                s2 = peg$c2;\n              }\n            } else {\n              peg$currPos = s2;\n              s2 = peg$c2;\n            }\n          } else {\n            peg$currPos = s2;\n            s2 = peg$c2;\n          }\n        }\n      } else {\n        s1 = peg$c2;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c3(s1);\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = peg$parsews();\n        if (s1 !== peg$FAILED) {\n          s1 = input.substring(s0, peg$currPos);\n        }\n        s0 = s1;\n      }\n\n      return s0;\n    }\n\n    function peg$parsemessageTextElement() {\n      var s0, s1;\n\n      s0 = peg$currPos;\n      s1 = peg$parsemessageText();\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c4(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parseargument() {\n      var s0, s1, s2;\n\n      s0 = peg$parsenumber();\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        s1 = [];\n        if (peg$c5.test(input.charAt(peg$currPos))) {\n          s2 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s2 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c6); }\n        }\n        if (s2 !== peg$FAILED) {\n          while (s2 !== peg$FAILED) {\n            s1.push(s2);\n            if (peg$c5.test(input.charAt(peg$currPos))) {\n              s2 = input.charAt(peg$currPos);\n              peg$currPos++;\n            } else {\n              s2 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c6); }\n            }\n          }\n        } else {\n          s1 = peg$c2;\n        }\n        if (s1 !== peg$FAILED) {\n          s1 = input.substring(s0, peg$currPos);\n        }\n        s0 = s1;\n      }\n\n      return s0;\n    }\n\n    function peg$parseargumentElement() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 123) {\n        s1 = peg$c7;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c8); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parseargument();\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$currPos;\n              if (input.charCodeAt(peg$currPos) === 44) {\n                s6 = peg$c10;\n                peg$currPos++;\n              } else {\n                s6 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c11); }\n              }\n              if (s6 !== peg$FAILED) {\n                s7 = peg$parse_();\n                if (s7 !== peg$FAILED) {\n                  s8 = peg$parseelementFormat();\n                  if (s8 !== peg$FAILED) {\n                    s6 = [s6, s7, s8];\n                    s5 = s6;\n                  } else {\n                    peg$currPos = s5;\n                    s5 = peg$c2;\n                  }\n                } else {\n                  peg$currPos = s5;\n                  s5 = peg$c2;\n                }\n              } else {\n                peg$currPos = s5;\n                s5 = peg$c2;\n              }\n              if (s5 === peg$FAILED) {\n                s5 = peg$c9;\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse_();\n                if (s6 !== peg$FAILED) {\n                  if (input.charCodeAt(peg$currPos) === 125) {\n                    s7 = peg$c12;\n                    peg$currPos++;\n                  } else {\n                    s7 = peg$FAILED;\n                    if (peg$silentFails === 0) { peg$fail(peg$c13); }\n                  }\n                  if (s7 !== peg$FAILED) {\n                    peg$reportedPos = s0;\n                    s1 = peg$c14(s3, s5);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$c2;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$c2;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c2;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c2;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c2;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c2;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c2;\n      }\n\n      return s0;\n    }\n\n    function peg$parseelementFormat() {\n      var s0;\n\n      s0 = peg$parsesimpleFormat();\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsepluralFormat();\n        if (s0 === peg$FAILED) {\n          s0 = peg$parseselectFormat();\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsesimpleFormat() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c15) {\n        s1 = peg$c15;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c16); }\n      }\n      if (s1 === peg$FAILED) {\n        if (input.substr(peg$currPos, 4) === peg$c17) {\n          s1 = peg$c17;\n          peg$currPos += 4;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c18); }\n        }\n        if (s1 === peg$FAILED) {\n          if (input.substr(peg$currPos, 4) === peg$c19) {\n            s1 = peg$c19;\n            peg$currPos += 4;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c20); }\n          }\n        }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$currPos;\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s4 = peg$c10;\n            peg$currPos++;\n          } else {\n            s4 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c11); }\n          }\n          if (s4 !== peg$FAILED) {\n            s5 = peg$parse_();\n            if (s5 !== peg$FAILED) {\n              s6 = peg$parsechars();\n              if (s6 !== peg$FAILED) {\n                s4 = [s4, s5, s6];\n                s3 = s4;\n              } else {\n                peg$currPos = s3;\n                s3 = peg$c2;\n              }\n            } else {\n              peg$currPos = s3;\n              s3 = peg$c2;\n            }\n          } else {\n            peg$currPos = s3;\n            s3 = peg$c2;\n          }\n          if (s3 === peg$FAILED) {\n            s3 = peg$c9;\n          }\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c21(s1, s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c2;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c2;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c2;\n      }\n\n      return s0;\n    }\n\n    function peg$parsepluralFormat() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c22) {\n        s1 = peg$c22;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c23); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s3 = peg$c10;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c11); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parseoffset();\n              if (s5 === peg$FAILED) {\n                s5 = peg$c9;\n              }\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parse_();\n                if (s6 !== peg$FAILED) {\n                  s7 = [];\n                  s8 = peg$parseoptionalFormatPattern();\n                  if (s8 !== peg$FAILED) {\n                    while (s8 !== peg$FAILED) {\n                      s7.push(s8);\n                      s8 = peg$parseoptionalFormatPattern();\n                    }\n                  } else {\n                    s7 = peg$c2;\n                  }\n                  if (s7 !== peg$FAILED) {\n                    peg$reportedPos = s0;\n                    s1 = peg$c24(s5, s7);\n                    s0 = s1;\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$c2;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$c2;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c2;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c2;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c2;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c2;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c2;\n      }\n\n      return s0;\n    }\n\n    function peg$parseselectFormat() {\n      var s0, s1, s2, s3, s4, s5, s6;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 6) === peg$c25) {\n        s1 = peg$c25;\n        peg$currPos += 6;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c26); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          if (input.charCodeAt(peg$currPos) === 44) {\n            s3 = peg$c10;\n            peg$currPos++;\n          } else {\n            s3 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c11); }\n          }\n          if (s3 !== peg$FAILED) {\n            s4 = peg$parse_();\n            if (s4 !== peg$FAILED) {\n              s5 = [];\n              s6 = peg$parseoptionalFormatPattern();\n              if (s6 !== peg$FAILED) {\n                while (s6 !== peg$FAILED) {\n                  s5.push(s6);\n                  s6 = peg$parseoptionalFormatPattern();\n                }\n              } else {\n                s5 = peg$c2;\n              }\n              if (s5 !== peg$FAILED) {\n                peg$reportedPos = s0;\n                s1 = peg$c27(s5);\n                s0 = s1;\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c2;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c2;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c2;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c2;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c2;\n      }\n\n      return s0;\n    }\n\n    function peg$parseselector() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      s1 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 61) {\n        s2 = peg$c28;\n        peg$currPos++;\n      } else {\n        s2 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c29); }\n      }\n      if (s2 !== peg$FAILED) {\n        s3 = peg$parsenumber();\n        if (s3 !== peg$FAILED) {\n          s2 = [s2, s3];\n          s1 = s2;\n        } else {\n          peg$currPos = s1;\n          s1 = peg$c2;\n        }\n      } else {\n        peg$currPos = s1;\n        s1 = peg$c2;\n      }\n      if (s1 !== peg$FAILED) {\n        s1 = input.substring(s0, peg$currPos);\n      }\n      s0 = s1;\n      if (s0 === peg$FAILED) {\n        s0 = peg$parsechars();\n      }\n\n      return s0;\n    }\n\n    function peg$parseoptionalFormatPattern() {\n      var s0, s1, s2, s3, s4, s5, s6, s7, s8;\n\n      s0 = peg$currPos;\n      s1 = peg$parse_();\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parseselector();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parse_();\n          if (s3 !== peg$FAILED) {\n            if (input.charCodeAt(peg$currPos) === 123) {\n              s4 = peg$c7;\n              peg$currPos++;\n            } else {\n              s4 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c8); }\n            }\n            if (s4 !== peg$FAILED) {\n              s5 = peg$parse_();\n              if (s5 !== peg$FAILED) {\n                s6 = peg$parsemessageFormatPattern();\n                if (s6 !== peg$FAILED) {\n                  s7 = peg$parse_();\n                  if (s7 !== peg$FAILED) {\n                    if (input.charCodeAt(peg$currPos) === 125) {\n                      s8 = peg$c12;\n                      peg$currPos++;\n                    } else {\n                      s8 = peg$FAILED;\n                      if (peg$silentFails === 0) { peg$fail(peg$c13); }\n                    }\n                    if (s8 !== peg$FAILED) {\n                      peg$reportedPos = s0;\n                      s1 = peg$c30(s2, s6);\n                      s0 = s1;\n                    } else {\n                      peg$currPos = s0;\n                      s0 = peg$c2;\n                    }\n                  } else {\n                    peg$currPos = s0;\n                    s0 = peg$c2;\n                  }\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$c2;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c2;\n              }\n            } else {\n              peg$currPos = s0;\n              s0 = peg$c2;\n            }\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c2;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c2;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c2;\n      }\n\n      return s0;\n    }\n\n    function peg$parseoffset() {\n      var s0, s1, s2, s3;\n\n      s0 = peg$currPos;\n      if (input.substr(peg$currPos, 7) === peg$c31) {\n        s1 = peg$c31;\n        peg$currPos += 7;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c32); }\n      }\n      if (s1 !== peg$FAILED) {\n        s2 = peg$parse_();\n        if (s2 !== peg$FAILED) {\n          s3 = peg$parsenumber();\n          if (s3 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c33(s3);\n            s0 = s1;\n          } else {\n            peg$currPos = s0;\n            s0 = peg$c2;\n          }\n        } else {\n          peg$currPos = s0;\n          s0 = peg$c2;\n        }\n      } else {\n        peg$currPos = s0;\n        s0 = peg$c2;\n      }\n\n      return s0;\n    }\n\n    function peg$parsews() {\n      var s0, s1;\n\n      peg$silentFails++;\n      s0 = [];\n      if (peg$c35.test(input.charAt(peg$currPos))) {\n        s1 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c36); }\n      }\n      if (s1 !== peg$FAILED) {\n        while (s1 !== peg$FAILED) {\n          s0.push(s1);\n          if (peg$c35.test(input.charAt(peg$currPos))) {\n            s1 = input.charAt(peg$currPos);\n            peg$currPos++;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c36); }\n          }\n        }\n      } else {\n        s0 = peg$c2;\n      }\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c34); }\n      }\n\n      return s0;\n    }\n\n    function peg$parse_() {\n      var s0, s1, s2;\n\n      peg$silentFails++;\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parsews();\n      while (s2 !== peg$FAILED) {\n        s1.push(s2);\n        s2 = peg$parsews();\n      }\n      if (s1 !== peg$FAILED) {\n        s1 = input.substring(s0, peg$currPos);\n      }\n      s0 = s1;\n      peg$silentFails--;\n      if (s0 === peg$FAILED) {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c37); }\n      }\n\n      return s0;\n    }\n\n    function peg$parsedigit() {\n      var s0;\n\n      if (peg$c38.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c39); }\n      }\n\n      return s0;\n    }\n\n    function peg$parsehexDigit() {\n      var s0;\n\n      if (peg$c40.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c41); }\n      }\n\n      return s0;\n    }\n\n    function peg$parsenumber() {\n      var s0, s1, s2, s3, s4, s5;\n\n      s0 = peg$currPos;\n      if (input.charCodeAt(peg$currPos) === 48) {\n        s1 = peg$c42;\n        peg$currPos++;\n      } else {\n        s1 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c43); }\n      }\n      if (s1 === peg$FAILED) {\n        s1 = peg$currPos;\n        s2 = peg$currPos;\n        if (peg$c44.test(input.charAt(peg$currPos))) {\n          s3 = input.charAt(peg$currPos);\n          peg$currPos++;\n        } else {\n          s3 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c45); }\n        }\n        if (s3 !== peg$FAILED) {\n          s4 = [];\n          s5 = peg$parsedigit();\n          while (s5 !== peg$FAILED) {\n            s4.push(s5);\n            s5 = peg$parsedigit();\n          }\n          if (s4 !== peg$FAILED) {\n            s3 = [s3, s4];\n            s2 = s3;\n          } else {\n            peg$currPos = s2;\n            s2 = peg$c2;\n          }\n        } else {\n          peg$currPos = s2;\n          s2 = peg$c2;\n        }\n        if (s2 !== peg$FAILED) {\n          s2 = input.substring(s1, peg$currPos);\n        }\n        s1 = s2;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c46(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    function peg$parsechar() {\n      var s0, s1, s2, s3, s4, s5, s6, s7;\n\n      if (peg$c47.test(input.charAt(peg$currPos))) {\n        s0 = input.charAt(peg$currPos);\n        peg$currPos++;\n      } else {\n        s0 = peg$FAILED;\n        if (peg$silentFails === 0) { peg$fail(peg$c48); }\n      }\n      if (s0 === peg$FAILED) {\n        s0 = peg$currPos;\n        if (input.substr(peg$currPos, 2) === peg$c49) {\n          s1 = peg$c49;\n          peg$currPos += 2;\n        } else {\n          s1 = peg$FAILED;\n          if (peg$silentFails === 0) { peg$fail(peg$c50); }\n        }\n        if (s1 !== peg$FAILED) {\n          peg$reportedPos = s0;\n          s1 = peg$c51();\n        }\n        s0 = s1;\n        if (s0 === peg$FAILED) {\n          s0 = peg$currPos;\n          if (input.substr(peg$currPos, 2) === peg$c52) {\n            s1 = peg$c52;\n            peg$currPos += 2;\n          } else {\n            s1 = peg$FAILED;\n            if (peg$silentFails === 0) { peg$fail(peg$c53); }\n          }\n          if (s1 !== peg$FAILED) {\n            peg$reportedPos = s0;\n            s1 = peg$c54();\n          }\n          s0 = s1;\n          if (s0 === peg$FAILED) {\n            s0 = peg$currPos;\n            if (input.substr(peg$currPos, 2) === peg$c55) {\n              s1 = peg$c55;\n              peg$currPos += 2;\n            } else {\n              s1 = peg$FAILED;\n              if (peg$silentFails === 0) { peg$fail(peg$c56); }\n            }\n            if (s1 !== peg$FAILED) {\n              peg$reportedPos = s0;\n              s1 = peg$c57();\n            }\n            s0 = s1;\n            if (s0 === peg$FAILED) {\n              s0 = peg$currPos;\n              if (input.substr(peg$currPos, 2) === peg$c58) {\n                s1 = peg$c58;\n                peg$currPos += 2;\n              } else {\n                s1 = peg$FAILED;\n                if (peg$silentFails === 0) { peg$fail(peg$c59); }\n              }\n              if (s1 !== peg$FAILED) {\n                s2 = peg$currPos;\n                s3 = peg$currPos;\n                s4 = peg$parsehexDigit();\n                if (s4 !== peg$FAILED) {\n                  s5 = peg$parsehexDigit();\n                  if (s5 !== peg$FAILED) {\n                    s6 = peg$parsehexDigit();\n                    if (s6 !== peg$FAILED) {\n                      s7 = peg$parsehexDigit();\n                      if (s7 !== peg$FAILED) {\n                        s4 = [s4, s5, s6, s7];\n                        s3 = s4;\n                      } else {\n                        peg$currPos = s3;\n                        s3 = peg$c2;\n                      }\n                    } else {\n                      peg$currPos = s3;\n                      s3 = peg$c2;\n                    }\n                  } else {\n                    peg$currPos = s3;\n                    s3 = peg$c2;\n                  }\n                } else {\n                  peg$currPos = s3;\n                  s3 = peg$c2;\n                }\n                if (s3 !== peg$FAILED) {\n                  s3 = input.substring(s2, peg$currPos);\n                }\n                s2 = s3;\n                if (s2 !== peg$FAILED) {\n                  peg$reportedPos = s0;\n                  s1 = peg$c60(s2);\n                  s0 = s1;\n                } else {\n                  peg$currPos = s0;\n                  s0 = peg$c2;\n                }\n              } else {\n                peg$currPos = s0;\n                s0 = peg$c2;\n              }\n            }\n          }\n        }\n      }\n\n      return s0;\n    }\n\n    function peg$parsechars() {\n      var s0, s1, s2;\n\n      s0 = peg$currPos;\n      s1 = [];\n      s2 = peg$parsechar();\n      if (s2 !== peg$FAILED) {\n        while (s2 !== peg$FAILED) {\n          s1.push(s2);\n          s2 = peg$parsechar();\n        }\n      } else {\n        s1 = peg$c2;\n      }\n      if (s1 !== peg$FAILED) {\n        peg$reportedPos = s0;\n        s1 = peg$c61(s1);\n      }\n      s0 = s1;\n\n      return s0;\n    }\n\n    peg$result = peg$startRuleFunction();\n\n    if (peg$result !== peg$FAILED && peg$currPos === input.length) {\n      return peg$result;\n    } else {\n      if (peg$result !== peg$FAILED && peg$currPos < input.length) {\n        peg$fail({ type: \"end\", description: \"end of input\" });\n      }\n\n      throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);\n    }\n  }\n\n  return {\n    SyntaxError: SyntaxError,\n    parse:       parse\n  };\n})();","// GENERATED FILE\nexport default {\"locale\":\"en\",\"pluralRuleFunction\":function (n) {var i=Math.floor(Math.abs(n)),v=n.toString().replace(/^[^.]*\\.?/,\"\").length;n=Math.floor(n);if(i===1&&v===0)return\"one\";return\"other\";}};","/* jslint esnext: true */\n\nimport IntlMessageFormat from './core';\nimport defaultLocale from './en';\n\nIntlMessageFormat.__addLocaleData(defaultLocale);\nIntlMessageFormat.defaultLocale = 'en';\n\nexport default IntlMessageFormat;\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nexport {defineProperty, objCreate, arrIndexOf, isArray, dateNow};\n\n// Purposely using the same implementation as the Intl.js `Intl` polyfill.\n// Copyright 2013 Andy Earnshaw, MIT License\n\nvar hop = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nvar realDefineProp = (function () {\n    try { return !!Object.defineProperty({}, 'a', {}); }\n    catch (e) { return false; }\n})();\n\nvar es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\nvar defineProperty = realDefineProp ? Object.defineProperty :\n        function (obj, name, desc) {\n\n    if ('get' in desc && obj.__defineGetter__) {\n        obj.__defineGetter__(name, desc.get);\n    } else if (!hop.call(obj, name) || 'value' in desc) {\n        obj[name] = desc.value;\n    }\n};\n\nvar objCreate = Object.create || function (proto, props) {\n    var obj, k;\n\n    function F() {}\n    F.prototype = proto;\n    obj = new F();\n\n    for (k in props) {\n        if (hop.call(props, k)) {\n            defineProperty(obj, k, props[k]);\n        }\n    }\n\n    return obj;\n};\n\nvar arrIndexOf = Array.prototype.indexOf || function (search, fromIndex) {\n    /*jshint validthis:true */\n    var arr = this;\n    if (!arr.length) {\n        return -1;\n    }\n\n    for (var i = fromIndex || 0, max = arr.length; i < max; i++) {\n        if (arr[i] === search) {\n            return i;\n        }\n    }\n\n    return -1;\n};\n\nvar isArray = Array.isArray || function (obj) {\n    return toString.call(obj) === '[object Array]';\n};\n\nvar dateNow = Date.now || function () {\n    return new Date().getTime();\n};\n","// GENERATED FILE\nexport default {\"locale\":\"en\",\"pluralRuleFunction\":function (n) {var i=Math.floor(Math.abs(n)),v=n.toString().replace(/^[^.]*\\.?/,\"\").length;n=Math.floor(n);if(i===1&&v===0)return\"one\";return\"other\";},\"fields\":{\"second\":{\"displayName\":\"Second\",\"relative\":{\"0\":\"now\"},\"relativeTime\":{\"future\":{\"one\":\"in {0} second\",\"other\":\"in {0} seconds\"},\"past\":{\"one\":\"{0} second ago\",\"other\":\"{0} seconds ago\"}}},\"minute\":{\"displayName\":\"Minute\",\"relativeTime\":{\"future\":{\"one\":\"in {0} minute\",\"other\":\"in {0} minutes\"},\"past\":{\"one\":\"{0} minute ago\",\"other\":\"{0} minutes ago\"}}},\"hour\":{\"displayName\":\"Hour\",\"relativeTime\":{\"future\":{\"one\":\"in {0} hour\",\"other\":\"in {0} hours\"},\"past\":{\"one\":\"{0} hour ago\",\"other\":\"{0} hours ago\"}}},\"day\":{\"displayName\":\"Day\",\"relative\":{\"0\":\"today\",\"1\":\"tomorrow\",\"-1\":\"yesterday\"},\"relativeTime\":{\"future\":{\"one\":\"in {0} day\",\"other\":\"in {0} days\"},\"past\":{\"one\":\"{0} day ago\",\"other\":\"{0} days ago\"}}},\"month\":{\"displayName\":\"Month\",\"relative\":{\"0\":\"this month\",\"1\":\"next month\",\"-1\":\"last month\"},\"relativeTime\":{\"future\":{\"one\":\"in {0} month\",\"other\":\"in {0} months\"},\"past\":{\"one\":\"{0} month ago\",\"other\":\"{0} months ago\"}}},\"year\":{\"displayName\":\"Year\",\"relative\":{\"0\":\"this year\",\"1\":\"next year\",\"-1\":\"last year\"},\"relativeTime\":{\"future\":{\"one\":\"in {0} year\",\"other\":\"in {0} years\"},\"past\":{\"one\":\"{0} year ago\",\"other\":\"{0} years ago\"}}}}};","/* jslint esnext: true */\n\nimport IntlRelativeFormat from './core';\nimport defaultLocale from './en';\n\nIntlRelativeFormat.__addLocaleData(defaultLocale);\nIntlRelativeFormat.defaultLocale = 'en';\n\nexport default IntlRelativeFormat;\n","// GENERATED FILE\nexport default {\"locale\":\"en\",\"pluralRuleFunction\":function (n) {var i=Math.floor(Math.abs(n)),v=n.toString().replace(/^[^.]*\\.?/,\"\").length;n=Math.floor(n);if(i===1&&v===0)return\"one\";return\"other\";},\"fields\":{\"second\":{\"displayName\":\"Second\",\"relative\":{\"0\":\"now\"},\"relativeTime\":{\"future\":{\"one\":\"in {0} second\",\"other\":\"in {0} seconds\"},\"past\":{\"one\":\"{0} second ago\",\"other\":\"{0} seconds ago\"}}},\"minute\":{\"displayName\":\"Minute\",\"relativeTime\":{\"future\":{\"one\":\"in {0} minute\",\"other\":\"in {0} minutes\"},\"past\":{\"one\":\"{0} minute ago\",\"other\":\"{0} minutes ago\"}}},\"hour\":{\"displayName\":\"Hour\",\"relativeTime\":{\"future\":{\"one\":\"in {0} hour\",\"other\":\"in {0} hours\"},\"past\":{\"one\":\"{0} hour ago\",\"other\":\"{0} hours ago\"}}},\"day\":{\"displayName\":\"Day\",\"relative\":{\"0\":\"today\",\"1\":\"tomorrow\",\"-1\":\"yesterday\"},\"relativeTime\":{\"future\":{\"one\":\"in {0} day\",\"other\":\"in {0} days\"},\"past\":{\"one\":\"{0} day ago\",\"other\":\"{0} days ago\"}}},\"month\":{\"displayName\":\"Month\",\"relative\":{\"0\":\"this month\",\"1\":\"next month\",\"-1\":\"last month\"},\"relativeTime\":{\"future\":{\"one\":\"in {0} month\",\"other\":\"in {0} months\"},\"past\":{\"one\":\"{0} month ago\",\"other\":\"{0} months ago\"}}},\"year\":{\"displayName\":\"Year\",\"relative\":{\"0\":\"this year\",\"1\":\"next year\",\"-1\":\"last year\"},\"relativeTime\":{\"future\":{\"one\":\"in {0} year\",\"other\":\"in {0} years\"},\"past\":{\"one\":\"{0} year ago\",\"other\":\"{0} years ago\"}}}}};","/* global React */\n/* jshint esnext:true */\n\n// TODO: Remove the global `React` binding lookup once the ES6 Module Transpiler\n// supports external modules. This is a hack for now that provides the local\n// modules a referece to React.\nexport default React;\n","/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n/* jslint esnext: true */\n\nexport {defineProperty, objCreate};\n\n// Purposely using the same implementation as the Intl.js `Intl` polyfill.\n// Copyright 2013 Andy Earnshaw, MIT License\n\nvar hop = Object.prototype.hasOwnProperty;\n\nvar realDefineProp = (function () {\n    try { return !!Object.defineProperty({}, 'a', {}); }\n    catch (e) { return false; }\n})();\n\nvar es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\nvar defineProperty = realDefineProp ? Object.defineProperty :\n        function (obj, name, desc) {\n\n    if ('get' in desc && obj.__defineGetter__) {\n        obj.__defineGetter__(name, desc.get);\n    } else if (!hop.call(obj, name) || 'value' in desc) {\n        obj[name] = desc.value;\n    }\n};\n\nvar objCreate = Object.create || function (proto, props) {\n    var obj, k;\n\n    function F() {}\n    F.prototype = proto;\n    obj = new F();\n\n    for (k in props) {\n        if (hop.call(props, k)) {\n            defineProperty(obj, k, props[k]);\n        }\n    }\n\n    return obj;\n};\n","/* jshint esnext:true */\n\n// TODO: Use `import React from \"react\";` when external modules are supported.\nimport React from '../react';\n\nimport IntlMixin from '../mixin';\n\nvar FormattedDate = React.createClass({\n    displayName: 'FormattedDate',\n    mixins     : [IntlMixin],\n\n    statics: {\n        formatOptions: [\n            'localeMatcher', 'timeZone', 'hour12', 'formatMatcher', 'weekday',\n            'era', 'year', 'month', 'day', 'hour', 'minute', 'second',\n            'timeZoneName'\n        ]\n    },\n\n    propTypes: {\n        format: React.PropTypes.string,\n        value : React.PropTypes.any.isRequired\n    },\n\n    render: function () {\n        var props    = this.props;\n        var value    = props.value;\n        var format   = props.format;\n        var defaults = format && this.getNamedFormat('date', format);\n        var options  = FormattedDate.filterFormatOptions(props, defaults);\n\n        return React.DOM.span(null, this.formatDate(value, options));\n    }\n});\n\nexport default FormattedDate;\n","/* jshint esnext:true */\n\n// TODO: Use `import React from \"react\";` when external modules are supported.\nimport React from '../react';\n\nimport IntlMixin from '../mixin';\n\nvar FormattedTime = React.createClass({\n    displayName: 'FormattedTime',\n    mixins     : [IntlMixin],\n\n    statics: {\n        formatOptions: [\n            'localeMatcher', 'timeZone', 'hour12', 'formatMatcher', 'weekday',\n            'era', 'year', 'month', 'day', 'hour', 'minute', 'second',\n            'timeZoneName'\n        ]\n    },\n\n    propTypes: {\n        format: React.PropTypes.string,\n        value : React.PropTypes.any.isRequired\n    },\n\n    render: function () {\n        var props    = this.props;\n        var value    = props.value;\n        var format   = props.format;\n        var defaults = format && this.getNamedFormat('time', format);\n        var options  = FormattedTime.filterFormatOptions(props, defaults);\n\n        return React.DOM.span(null, this.formatTime(value, options));\n    }\n});\n\nexport default FormattedTime;\n","/* jshint esnext:true */\n\n// TODO: Use `import React from \"react\";` when external modules are supported.\nimport React from '../react';\n\nimport IntlMixin from '../mixin';\n\nvar FormattedRelative = React.createClass({\n    displayName: 'FormattedRelative',\n    mixins     : [IntlMixin],\n\n    statics: {\n        formatOptions: [\n            'style', 'units'\n        ]\n    },\n\n    propTypes: {\n        format: React.PropTypes.string,\n        value : React.PropTypes.any.isRequired\n    },\n\n    render: function () {\n        var props    = this.props;\n        var value    = props.value;\n        var format   = props.format;\n        var defaults = format && this.getNamedFormat('relative', format);\n        var options  = FormattedRelative.filterFormatOptions(props, defaults);\n\n        return React.DOM.span(null, this.formatRelative(value, options));\n    }\n});\n\nexport default FormattedRelative;\n","/* jshint esnext:true */\n\n// TODO: Use `import React from \"react\";` when external modules are supported.\nimport React from '../react';\n\nimport IntlMixin from '../mixin';\n\nvar FormattedNumber = React.createClass({\n    displayName: 'FormattedNumber',\n    mixins     : [IntlMixin],\n\n    statics: {\n        formatOptions: [\n            'localeMatcher', 'style', 'currency', 'currencyDisplay',\n            'useGrouping', 'minimumIntegerDigits', 'minimumFractionDigits',\n            'maximumFractionDigits', 'minimumSignificantDigits',\n            'maximumSignificantDigits'\n        ]\n    },\n\n    propTypes: {\n        format: React.PropTypes.string,\n        value : React.PropTypes.any.isRequired\n    },\n\n    render: function () {\n        var props    = this.props;\n        var value    = props.value;\n        var format   = props.format;\n        var defaults = format && this.getNamedFormat('number', format);\n        var options  = FormattedNumber.filterFormatOptions(props, defaults);\n\n        return React.DOM.span(null, this.formatNumber(value, options));\n    }\n});\n\nexport default FormattedNumber;\n","/* jshint esnext:true */\n\n// TODO: Use `import React from \"react\";` when external modules are supported.\nimport React from '../react';\n\nimport IntlMixin from '../mixin';\n\nvar FormattedMessage = React.createClass({\n    displayName: 'FormattedMessage',\n    mixins     : [IntlMixin],\n\n    propTypes: {\n        tagName: React.PropTypes.string,\n        message: React.PropTypes.string.isRequired\n    },\n\n    getDefaultProps: function () {\n        return {tagName: 'span'};\n    },\n\n    render: function () {\n        var props   = this.props;\n        var tagName = props.tagName;\n        var message = props.message;\n\n        // Creates a token with a random guid that should not be guessible or\n        // conflict with other parts of the `message` string.\n        var guid       = Math.floor(Math.random() * 0x10000000000).toString(16);\n        var tokenRegex = new RegExp('(@__ELEMENT-' + guid + '-\\\\d__@)', 'g');\n        var elements   = {};\n\n        var generateToken = (function () {\n            var counter = 0;\n            return function () {\n                return '@__ELEMENT-' + guid + '-' + (counter += 1) + '__@';\n            };\n        }());\n\n        // Iterates over the `props` to keep track of any React Element values\n        // so they can be represented by the `token` as a placeholder when the\n        // `message` is formatted. This allows the formatted message to then be\n        // broken-up into parts with references to the React Elements inserted\n        // back in.\n        var values = Object.keys(props).reduce(function (values, name) {\n            var value = props[name];\n            var token;\n\n            if (React.isValidElement(value)) {\n                token           = generateToken();\n                values[name]    = token;\n                elements[token] = value;\n            } else {\n                values[name] = value;\n            }\n\n            return values;\n        }, {});\n\n        // Formats the `message` with the `values`, including the `token`\n        // placeholders for React Element values.\n        var formattedMessage = this.formatMessage(message, values);\n\n        // Split the message into parts, and replace the token placeholder parts\n        // with references to the React Element values captured above. This\n        // approach allows messages to render with React Elements while keeping\n        // React's virtual diffing working properly.\n        var children = formattedMessage.split(tokenRegex).map(function (part) {\n            return elements[part] || part;\n        });\n\n        var elementArgs = [tagName, null].concat(children);\n        return React.createElement.apply(null, elementArgs);\n    }\n});\n\nexport default FormattedMessage;\n","/* jshint esnext:true */\n\n/*\nHTML escaping implementation is the same as React's (on purpose.) Therefore, it\nhas the following Copyright and Licensing:\n\nCopyright 2013-2014, Facebook, Inc.\nAll rights reserved.\n\nThis source code is licensed under the BSD-style license found in the LICENSE\nfile in the root directory of React's source tree.\n*/\nvar ESCAPED_CHARS = {\n    '&' : '&amp;',\n    '>' : '&gt;',\n    '<' : '&lt;',\n    '\"' : '&quot;',\n    '\\'': '&#x27;'\n};\n\nvar UNSAFE_CHARS_REGEX = /[&><\"']/g;\n\nexport default function (str) {\n    return ('' + str).replace(UNSAFE_CHARS_REGEX, function (match) {\n        return ESCAPED_CHARS[match];\n    });\n}\n","/* jshint esnext:true */\n\n// TODO: Use `import React from \"react\";` when external modules are supported.\nimport React from '../react';\n\nimport escape from '../escape';\nimport IntlMixin from '../mixin';\n\nvar FormattedHTMLMessage = React.createClass({\n    displayName: 'FormattedHTMLMessage',\n    mixins     : [IntlMixin],\n\n    propTypes: {\n        tagName: React.PropTypes.string,\n        message: React.PropTypes.string.isRequired\n    },\n\n    getDefaultProps: function () {\n        return {tagName: 'span'};\n    },\n\n    render: function () {\n        var props   = this.props;\n        var tagName = props.tagName;\n        var message = props.message;\n\n        // Process all the props before they are used as values when formatting\n        // the ICU Message string. Since the formatted message will be injected\n        // via `innerHTML`, all String-based values need to be HTML-escaped. Any\n        // React Elements that are passed as props will be rendered to a static\n        // markup string that is presumed to be safe.\n        var values = Object.keys(props).reduce(function (values, name) {\n            var value = props[name];\n\n            if (typeof value === 'string') {\n                value = escape(value);\n            } else if (React.isValidElement(value)) {\n                value = React.renderToStaticMarkup(value);\n            }\n\n            values[name] = value;\n            return values;\n        }, {});\n\n        // Since the message presumably has HTML in it, we need to set\n        // `innerHTML` in order for it to be rendered and not escaped by React.\n        // To be safe, all string prop values were escaped before formatting the\n        // message. It is assumed that the message is not UGC, and came from\n        // the developer making it more like a template.\n        //\n        // Note: There's a perf impact of using this component since there's no\n        // way for React to do its virtual DOM diffing.\n        return React.DOM[tagName]({\n            dangerouslySetInnerHTML: {\n                __html: this.formatMessage(message, values)\n            }\n        });\n    }\n});\n\nexport default FormattedHTMLMessage;\n","/* jshint esnext: true */\n\nimport {\n    IntlMixin,\n    FormattedDate,\n    FormattedTime,\n    FormattedRelative,\n    FormattedNumber,\n    FormattedMessage,\n    FormattedHTMLMessage,\n    __addLocaleData\n} from './react-intl';\n\nexport default {\n    IntlMixin           : IntlMixin,\n    FormattedDate       : FormattedDate,\n    FormattedTime       : FormattedTime,\n    FormattedRelative   : FormattedRelative,\n    FormattedNumber     : FormattedNumber,\n    FormattedMessage    : FormattedMessage,\n    FormattedHTMLMessage: FormattedHTMLMessage,\n\n    __addLocaleData: __addLocaleData\n};\n\n// Back-compat for v1.0.0. This adds a `ReactIntlMixin` global that references\n// the mixin directly. This will be deprecated in v2.0.0.\nif (typeof window !== 'undefined') {\n    window.ReactIntlMixin     = IntlMixin;\n    IntlMixin.__addLocaleData = __addLocaleData;\n}\n"]}